Tho*_*mas 7 ef-code-first entity-framework-4.1
我有以下型号:
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; }
}
Run Code Online (Sandbox Code Playgroud)
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");
});
Run Code Online (Sandbox Code Playgroud)
在我们进一步讨论之前,我想澄清一下我要找的结果:
当有人删除列表时,我希望级联删除约束自动删除与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"中删除级联删除.
可能吗?如果没有,还有其他方法可以解决这个问题吗?
| 归档时间: |
|
| 查看次数: |
1102 次 |
| 最近记录: |