实体框架 - 包含多个级别

时间:2016-05-04 15:29:08

标签: c# asp.net entity-framework-6

如果我有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对象,复制数据。有没有办法防止它?我不使用延迟加载。

1 个答案:

答案 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)