我有以下模型:
public class List
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<ListRules> ListRule { get; set; }
}
public class ListRule
{
public virtual int Id { get; set; }
public virtual List List { get; set; }
public virtual ICollection<List> Lists { get; set; }
}
一个 List 可以有许多 ListRules。ListRule 必须属于一个列表。ListRule 也可以有 0、1 或许多与之关联的列表。
我尝试了以下绑定:
modelBuilder.Entity<ListRule>()
.HasRequired(x => x.List)
.WithMany(x => x.ListRule)
.Map(x => x.MapKey("ListId"));
modelBuilder.Entity<ListRule>()
.HasMany(x => x.Lists)
.WithMany()
.Map(x => {
x.MapLeftKey("ListRuleId");
x.MapRightKey("ListId");
x.ToTable("ListRuleLists");
});
在我们进一步讨论之前,我想澄清一下我正在寻找的结果:
当有人删除列表时,我希望级联删除约束自动删除与 ListRule 表中的列表关联的关系以及 ListRule 和 ListRuleLists 表之间的多对多关系。
当我尝试更新数据库时,我收到一条错误消息,提示“表 'ListRuleLists' 上的 FOREIGN KEY 约束 'FK_ListRuleLists_Lists_ListId' 可能会导致循环或多个级联路径。” 我理解为什么会这样,目前解决它的一种方法是将 WillCascadeOnDelete(false) 添加到上面的第一个模型绑定中。
但这会产生不希望的副作用。假设在 ListRuleList 表中有一个 List 和一个 ListRule,没有多对多关系。如果用户删除列表,则 ListRule 现在将因为 WillCascadeOnDelete(false) 而成为孤立对象。
我该如何将 WillCascadeOnDelete(false) 添加到第二个绑定的 RightKey 侧?换句话说,我想从外键约束“FK_ListRuleLists_Lists_ListId”中删除级联删除。
可能吗?如果没有,有没有其他方法可以解决这个问题?