在Code First中对外键进行级联删除

时间:2012-07-30 16:18:29

标签: c# entity-framework

我无法让级联删除工作正常。这是我的外键表:

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
}

我尝试了三种不同的方式。当我不使用任何流畅的API时,它会适当地设置表和外键,但级联删除不起作用。当我使用这段代码时:

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

它创建了第二列,所以我有一个完全为空的MedicalPlan_Id,然后是一个MedicalPlan_Id1它填充。当我使用它时:

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

创建数据库时出错。如何正确设置级联删除?

1 个答案:

答案 0 :(得分:4)

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

...应该是正确的映射。如果省略Withoptional(...)中的lambda表达式,则EF假定MedicalPlan.CoverageLevels实体中没有CoverageLevel没有反向导航属性,并且CoverageLevel.MedicalPlan属于另一个关系,这是其中的原因。第二个外键。