是否可以将WillCascadeOnDelete添加到多对多关系的一侧

时间:2012-06-21 20:35:53

标签: entity-framework-4.1 ef-code-first

我有以下型号:

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表中的List关联的关系以及ListRule和ListRuleLists表之间的多对多关系。

当我尝试更新数据库时,我收到一条错误,说'表'ListRuleLists'上的'FOREIGN KEY约束'FK_ListRuleLists_Lists_ListId'可能导致循环或多个级联路径。“我理解为什么会这样,目前解决这个问题的一种方法是在上面的第一个模型绑定中添加一个WillCascadeOnDelete(false)。

但这会产生不良副作用。假设在ListRuleList表中有一个List,其中一个ListRule没有多对多关系。如果用户删除了List,则由于WillCascadeOnDelete(false),ListRule现在将成为孤立状态。

如何将WillCascadeOnDelete(false)添加到第二个绑定的RightKey端呢?换句话说,我想从外键约束“FK_ListRuleLists_Lists_ListId”中删除级联删除。

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

0 个答案:

没有答案