2011-03-20 20 views
14

Khi thực hiện xóa mối quan hệ một-nhiều mà không lộ chìa khóa ngoài, EF sẽ xóa bản ghi gốc và cố gắng vô hiệu khóa ngoài trên bản ghi con. Điều này tất nhiên gây ra một lỗi vì khóa ngoại không phải là nullable. Thêm khóa ngoài vào lớp con sẽ ghi đè hành vi này, nhưng tôi không muốn để lộ nó.Bật tính năng xóa tầng trong Mã EF Đầu tiên mà không để lộ khóa ngoài

Ví dụ cho hai lớp sau, tôi không muốn có JobId làm thuộc tính của lớp Project.

public class Job : ModelBase 
{ 
    [Required] 
    [StringLength(100)] 
    public string Company { get; set; } 

    [Required] 
    [StringLength(100)] 
    public string JobTitle { get; set; } 

    public ICollection<Project> Projects { get; set; } 
} 

public class Project : ModelBase 
{ 
    [Required] 
    [StringLength(100)] 
    public string Name { get; set; } 

    [Required] 
    public string Summary { get; set; } 

    public int JobId { get; set; } 
} 

Có cách nào để cho phép xóa tầng trong mã EF trước tiên mà không để lộ khóa ngoại ở nhiều phía của mối quan hệ không?

Trả lời

14

Yup! Xóa JobId và thêm các thông tin sau:

protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Job>().HasMany(j => j.Projects).WithRequired(); 
    } 

Trong cơ sở dữ liệu, điều này sẽ thêm xóa tầng trong mối quan hệ PK/FK.

(Tôi giả định rằng ModelBase của bạn có số nguyên Id =)

+0

Hoàn hảo. Cảm ơn! –

+0

Không phải những gì tôi sẽ gọi rõ ràng ... –