如果我有3个班级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对象,复制数据。有没有办法防止它?我不使用延迟加载。
答案 0 :(得分:1)
您指示实体框架使用 A 设置加载 b 和 c 实体。由于 b 项目包含对 C 类型项目的引用,可能实际上与 a 相同的已加载项目对象,然后实体框架将使用它们来构造对象图。这并不意味着Entity Framework会生成额外的SQL连接以加载B类型的 c 项。要做到这一点,你会写
Context.A.Where(...).Include(x=>x.b).Include(x=>x.c).Include(x=>x.b.c)