我在现有 (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 方法。
我在这里缺少什么?
从 EF CTP4 开始,无法directly通过 Fluent API 打开多对多关联的级联删除。
也就是说,如果您的目的是确保可以删除该原则(例如Plan记录),而不必担心链接表中的依赖记录(即计划提示链接)那么您不需要在数据库上打开级联,因为当涉及多对多关联时,EF Code First 将处理客户端的级联删除。
例如,当您删除一个Plan对象,代码优先足够聪明,可以先发送一条删除语句来删除对象中的依赖记录计划提示链接表,之后它将发送另一个删除语句来删除计划记录。
欲了解更多信息,请查看以下帖子:
EF CTP4 多对多关系级联删除 https://stackoverflow.com/questions/4272403/ef-ctp4-cascade-delete-on-many-to-many-relationship/4273600#4273600
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)