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

pro*_*don 5 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
}
Run Code Online (Sandbox Code Playgroud)

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

modelBuilder.Entity<MedicalPlan>().HasMany(t => t.CoverageLevels).WithOptional.WillCascadeOnDelete();
Run Code Online (Sandbox Code Playgroud)

它创建了第二列,所以我有一个完全null MedicalPlan_Id,然后MedicalPlan_Id1它填充.我用这个时:

modelBuilder.Entity<MedicalPlan>().HasMany(t => t.CoverageLevels).WithOptional().HasForeignKey(d => d.MedicalPlan).WillCascadeOnDelete();
Run Code Online (Sandbox Code Playgroud)

我在创建数据库时遇到错误.如何正确设置级联删除?

Sla*_*uma 4

modelBuilder.Entity<MedicalPlan>()
    .HasMany(m => m.CoverageLevels)
    .WithOptional(c => c.MedicalPlan)
    .WillCascadeOnDelete();
Run Code Online (Sandbox Code Playgroud)

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