我正在尝试首先使用代码和流畅的API来创建一个对象,该对象包含来自同一个表的两个不同的实体。换句话说,转移对象持有对两个不同坦克对象的引用 - 一个是源,另一个是目的地。
但是,当我使用下面的代码时,我得到一个Exception,声明“引用关系将导致不允许的循环引用。”
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)找到答案答案 0 :(得分:1)
如您所述,您应该可以添加.WillCascadeOnDelete(false)
- https://stackoverflow.com/a/5559300/5416
modelBuilder.Entity<Transfer>()
.HasRequired<Tank>(t => t.Source)
.WithMany(t => t.OutboundTransfers)
.WillCascadeOnDelete(false);
modelBuilder.Entity<Transfer>()
.HasRequired<Tank>(t => t.Destination)
.WithMany(t => t.InboundTransfers)
.WillCascadeOnDelete(false);
我刚刚添加了这个答案,因此它不会在未答复的列表中显示为无答案,答案为零。标记为社区维基:)
答案 1 :(得分:0)
像往常一样,Ladislav(EF大师)有EF问题的答案。 (感谢Ladislav) 只是一个替代我发现有用。 我有一个并行运行的第二个解决方案。 如果我每个人都有代码第一个问题。我先试试这个: 反向工程师编写第一个解决方案(来自EF电动工具)
我有一个测试数据库,我在DB中手动添加了所需的概念。 我仍然觉得在DB中这样做更直观,因为我是第一个新代码。 然后使用powertool http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d
在项目/解决方案上右键单击实体框架,反向工程DB以首先编码。
查看它产生的代码。你得到一个如何做事的例子。