2012-07-30 30 views
5

Tôi không thể xóa bỏ tầng để hoạt động bình thường. Đây là bàn phím ngoài nước ngoài của tôi:Xóa tầng trên khóa ngoài trong Mã số Đầu tiên

public class CoverageLevel 
{ 
    public int Id { get; set; } 
    public virtual MedicalPlan MedicalPlan { get; set; } //foreign key 
    public virtual VisionPlan VisionPlan { get; set; } //foreign key 
    public virtual DentalPlan DentalPlan { get; set; } //foreign key 
} 

Có ba cách khác nhau mà tôi đã thử. Khi tôi không sử dụng bất kỳ API thông thạo nào, nó sẽ thiết lập các bảng và các khóa nước ngoài một cách thích hợp, nhưng việc xóa tầng không hoạt động. Khi tôi sử dụng mã này:

modelBuilder.Entity<MedicalPlan>().HasMany(t => t.CoverageLevels).WithOptional.WillCascadeOnDelete(); 

nó tạo ra một cột thứ hai, vì vậy tôi có hoàn toàn vô MedicalPlan_Id và sau đó một MedicalPlan_Id1 rằng nó lấp đầy. Khi tôi sử dụng điều này:

modelBuilder.Entity<MedicalPlan>().HasMany(t => t.CoverageLevels).WithOptional().HasForeignKey(d => d.MedicalPlan).WillCascadeOnDelete(); 

Tôi gặp lỗi khi tạo cơ sở dữ liệu. Làm thế nào tôi có thể thiết lập xóa tầng đúng cách?

Trả lời

4
modelBuilder.Entity<MedicalPlan>() 
    .HasMany(m => m.CoverageLevels) 
    .WithOptional(c => c.MedicalPlan) 
    .WillCascadeOnDelete(); 

... phải là ánh xạ chính xác. Nếu bạn bỏ qua biểu thức lambda trong Withoptional(...) EF giả định rằng MedicalPlan.CoverageLevels không có thuộc tính điều hướng ngược trong thực thể CoverageLevel và rằng CoverageLevel.MedicalPlan thuộc về một mối quan hệ khác là lý do cho khóa ngoại thứ hai.

Các vấn đề liên quan