渴望使用实体框架加载聚合根

时间:2009-06-12 15:29:23

标签: entity-framework eager-loading aggregateroot

我想创建一种更加结构化的方法来加载所需的实体树:

我需要大量数据,因此我使用类型安全包含(只是普通包含但使用Lambda)as shown here

正如我所说,我需要大量数据,基本上是1个父项下的整个实体树。

现在,我可以这样做:

context.House
    .Include(x => x.Doors)
    .Include(x => x.Doors.FirstOrDefault().Joint)
    .Include(x => x.Doors.FirstOrDefault().Joint.FirstOrDefault().JointCategory)
    .Include(x => x.Doors.FirstOrDefault().Joint.FirstOrDefault().JointCategory.JointType)
    .Include(x => x.Windows)
    // ... same thing
    .Include(x => x.Roof)
    // ... same thing

正如你所看到的,这行包含的内容可以变得非常庞大。这实际上是一个非常简化的实际代码样本(不包括房屋btw)

所以我想做的是创建方法,负责树中的分支。方法可以接受对象查询并包含子进程,然后调用“子加载器方法”。此外,父母也无所谓,只要它具有属于孩子类型的属性。

这可能没有多大意义所以:

public void LoadHouse(int id)
{
    // ...
    ObjectQuery<House> query = context.House;

    // and now?
    LoadDoors(query, x => x.Door);

}

public void LoadDoors<T>(ObjectQuery<T> query, ..?..)
{
    // ... ?

    LoadJoints(...)


}

等等。但是我无法理解它...传入的查询和调用子方法之间缺少链接。

有人做过这样的事吗?或者任何人都可以给我一些指示?

1 个答案:

答案 0 :(得分:2)

尝试这样的事情:

query = LoadDoors(query,x =&gt; x.Door);

其中LoadX返回调用Include的结果。