3

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

我需要大量数据,所以我使用类型安全的包含(只是一个普通的包含,但使用 Lambda)来执行此操作,如此处所示

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

现在,我可以这样做:

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

如您所见,这条充满包含的行会变得非常庞大。这实际上是实际代码的一个非常简化的示例(顺便说一句,不包括房屋)

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

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

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(...)


}

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

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

4

1 回答 1

2

尝试这样的事情:

查询 = LoadDoors(查询,x => x.Door);

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

于 2009-06-12T16:43:53.893 回答