实体框架-包含多个级别



如果我有三个类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集合加载bc实体。由于b项包含对C类型项的引用,可能实际上是与a对象相同的加载项,因此实体框架将使用它们来构建对象图。这并不意味着实体框架会生成一个额外的SQL联接来加载B类型的c项。要做到这一点,你需要写

Context.A.Where(...).Include(x=>x.b).Include(x=>x.c).Include(x=>x.b.c)