如果我有三个类A、B和C:
class A {
public B b { get; set; }
public C c { get; set; }
}
class B {
public C c { get; set; }
}
class C {
...
}
当我进行类似的查询时
Context.A.Where(...).Include(x => x.b).Include(x => x.c);
实体在A和B中加载C对象,从而复制数据。有办法防止它吗?我不使用懒惰加载。
您指示实体框架使用A集合加载b和c实体。由于b项包含对C类型项的引用,可能实际上是与a对象相同的加载项,因此实体框架将使用它们来构建对象图。这并不意味着实体框架会生成一个额外的SQL联接来加载B类型的c项。要做到这一点,你需要写
Context.A.Where(...).Include(x=>x.b).Include(x=>x.c).Include(x=>x.b.c)