实体框架在.Include之后返回无限实体引用

时间:2015-03-02 16:02:17

标签: c# entity-framework

我遇到了Entity Framework的问题,如果我包含一个实体,例如我有:

  • 具有外键引用的实体A:

  • 实体B

如果我运行实体框架查询并执行.Include("实体B"),我的结果实体(实体A)具有.Entity B的属性。确定' s好#& 39;我所期待的。但是!

实体B然后有一个实体A属性,该属性被填充,然后填充了一个实体B属性,该属性具有一个实体A属性,该属性被填充并且一直打开和继续。

为什么Entity Framework会这样做?由于这些实体的所有不必要的实现,它看起来很浪费并且返回的实体的大小要大得多。

当然,我在某个地方错过了一些设置。任何想法的家伙?

1 个答案:

答案 0 :(得分:0)

此行为按设计运行。从技术上讲,这是一个circular reference

CodeCaster所述,有相同的对象。可以使用以下源代码模拟类似的结果:

class A {
   public B BReference { get; set; }
}

class B {
   public A AReference { get; set; }
}

static class Program 
{
    [STAThread]
    public static void Main()
    {
        A a = new A();
        B b = new B();
        b.AReference = a;
        a.BReference = b;

        // you should have b.AReference == a and
        // a.Breference == b
    }
}

从数据库加载数据时,实体框架也会这样做。你应该确保不要深入研究它。

尝试阻止这些场景总是一个好主意,因为它们会产生很多麻烦(在SO上寻找循环引用......),尤其是在使用这些类进行API或序列化时。

无论如何,EF或其他映射工具都使用了这种结构,编码时非常方便。