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

本文关键字:一个对象 两个 对象 关联 实体 类型 | 更新日期: 2023-09-27 17:56:12

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

我最好的猜测是它认为我将两个键指向同一个坦克? 知道我该如何做到这一点吗?

编辑:找到答案作为添加.WillCascadeOnDelete(false) from Entity Framework Code First - 同一表中的两个外键

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

正如您所说,您应该能够添加.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);

我只是添加了这个答案,以便它不再在未回答列表中显示为未回答且零答案。标记为社区维基:)

像往常一样,Ladislav(EF Guru)有EF问题的答案。(感谢拉迪斯拉夫)只是我发现有用的替代方案。我有第二个并行运行的解决方案。如果我每个人都有一个代码第一个问题。我首先尝试:逆向工程师编写代码优先解决方案。(来自EF电动工具)

我有一个测试数据库,我在数据库中手动添加所需的概念。我仍然发现在数据库中执行此操作更直观,因为我首先是代码新手。然后使用电动工具http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d

在"项目/解决方案"上右键单击"实体框架",首先对数据库进行反向工程以编码。

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