我无法让级联删除工作正常。这是我的外键表:
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();
创建数据库时出错。如何正确设置级联删除?
答案 0 :(得分:4)
modelBuilder.Entity<MedicalPlan>()
.HasMany(m => m.CoverageLevels)
.WithOptional(c => c.MedicalPlan)
.WillCascadeOnDelete();
...应该是正确的映射。如果省略Withoptional(...)
中的lambda表达式,则EF假定MedicalPlan.CoverageLevels
实体中没有CoverageLevel
没有反向导航属性,并且CoverageLevel.MedicalPlan
属于另一个关系,这是其中的原因。第二个外键。