7

我有以下模型:

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”中删除级联删除。

可能吗?如果没有,有没有其他方法可以解决这个问题?

4

0 回答 0