我在现有(MSSQL 2008 R2)数据库中有两个表,它们通过链接表相关联。
这两个表是“计划”和“提示”。链接表是“PlanTipLinks”。
计划可以提供许多提示,并且提示可以与多个计划相关联(即,它是多对多关系)。在应用程序中,我只关心“Plan.Tips”关系。我不需要Tip.Plans反向关系。
链接表中的外键引用不能为空。
我正在使用以下流畅的API代码来映射这种关系:
modelBuilder.Entity<Plan>()
.HasMany(p => p.Tips)
.WithMany()
.Map("PlanTipLinks", (p, t) =>
new
{
PlanId = p.Id,
TipId = t.Id
});
这会在表格中创建正确的条目。问题是,当我删除计划时,我在PlanTipLinks表上得到了一个外键异常。
据推测,当删除计划时,我需要告诉它级联到PlanTipLinks表中,但我不知道该怎么做。我似乎无法使用HasMany / WithMany方法调用WillCascadeOnDelete方法。
我在这里缺少什么?
答案 0 :(得分:1)
从EF CTP4开始,无法通过Fluent API 直接启用多对多关联的级联删除。
那就是说,如果您的目的是确保您可以删除原则(例如计划记录),而不必担心链接表中的依赖记录(即 PlanTipLinks )那么你不需要打开数据库上的级联,因为当涉及到多对多关联时,EF Code First将负责客户端的级联删除。
例如,当您删除计划对象时,代码首先足够智能,首先发送删除语句以摆脱 PlanTipLinks 表中的依赖记录,之后,它将发送另一个删除语句来删除计划记录。
有关详细信息,请查看以下帖子:
EF CTP4 cascade delete on many to many relationship