我遇到了Entity Framework的问题,如果我包含一个实体,例如我有:
具有外键引用的实体A:
实体B
如果我运行实体框架查询并执行.Include("实体B"),我的结果实体(实体A)具有.Entity B的属性。确定' s好#& 39;我所期待的。但是!
实体B然后有一个实体A属性,该属性被填充,然后填充了一个实体B属性,该属性具有一个实体A属性,该属性被填充并且一直打开和继续。
为什么Entity Framework会这样做?由于这些实体的所有不必要的实现,它看起来很浪费并且返回的实体的大小要大得多。
当然,我在某个地方错过了一些设置。任何想法的家伙?
答案 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或其他映射工具都使用了这种结构,编码时非常方便。