【发布时间】:2014-01-28 12:03:37
【问题描述】:
我有这样的关系
public class Widget
{
public virtual int Id { get; set; }
public virtual string Text { get; set; }
}
public class WidgetPair
{
public virtual int Id { get; set; }
public virtual Widget WidgetA { get; set; }
public virtual int WidgetAId { get; set; }
public virtual Widget WidgetB { get; set; }
public virtual int WidgetBId { get; set; }
}
请注意,Widget 在对象模型中没有 WidgetPair 的概念。
当我尝试使用 EF Code First 迁移更新我的数据库时,我收到错误
在表 'WidgetPairs' 上引入 FOREIGN KEY 约束 'FK_dbo.WidgetPairs_dbo.Widget_WidgetAId' 可能会导致循环或多个级联路径
有道理,因为 SQL Server 不喜欢two properties from the table pointing to the same parent。
期望的行为是,如果给定的 WidgetPair.WidgetA(或 .WidgetB)指向随后被删除的特定 Widget,则 WidgetA(或 WidgetB)变为 null。
我不希望 Widget 表或 WidgetPairs 表中的删除来删除另一个表中的一行。
似乎我可以使用流畅的界面进行配置,但我无法确切了解如何做到这一点。如果我想添加从 Widget 到 WidgetPair 的引用(我这样做 not),以下似乎可行:
modelBuilder.Entity<WidgetPair>().HasOptional(p => p.WidgetA)
.WithMany(q => q.TheChildWidget)
.WillCascadeOnDelete(false);
这是行不通的,因为一个 Widget 可以参与多个 WidgetPairs。此外,Widget 没有域要求直接知道它参与的 WidgetPairs。
是否可以配置此行为?怎么样?
【问题讨论】:
标签: entity-framework ef-code-first entity-framework-5