【发布时间】:2011-08-24 13:56:51
【问题描述】:
我正在尝试首先使用代码和流畅的 API 创建一个对象,该对象包含同一个表中的两个不同实体。换句话说,一个传输对象持有对两个不同坦克对象的引用——一个是源,另一个是目标。
但是,当我使用以下代码时,我收到一个异常,指出“引用关系将导致不允许的循环引用。”
modelBuilder.Entity<Transfer>()
.HasRequired<Tank>(t => t.Source)
.WithMany(t => t.OutboundTransfers);
modelBuilder.Entity<Transfer>()
.HasRequired<Tank>(t => t.Destination)
.WithMany(t => t.InboundTransfers);
我最好的猜测是它认为我将两个键都指向同一个坦克?知道我该怎么做吗?
编辑:从Entity Framework Code First - two Foreign Keys from same table添加 .WillCascadeOnDelete(false) 找到了答案
【问题讨论】:
-
是的,当两个导航属性指向同一个表时,您不能让 EF 4.1 启用级联删除约束。要启用正确的约束,您需要使用 Seeding 对象在数据库中手动添加它们以执行正确的脚本。
-
就是这样,正如您所发现的,正如 Alexandre 也指出的那样。在 MSSMS 上手动执行此操作会引发错误“无法创建关系 (...) 可能导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他外键约束。”
-
您可以将您的解决方案添加为答案并标记它吗?
标签: c# .net ef-code-first entity-framework-4.1 fluent