从一个对象到同一实体类型的两个对象的多个关联

时间:2011-05-13 01:05:43

标签: c# .net ef-code-first entity-framework-4.1 fluent

我正在尝试首先使用代码和流畅的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)找到答案

2 个答案:

答案 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以首先编码。

查看它产生的代码。你得到一个如何做事的例子。