【发布时间】:2009-06-12 15:29:22
【问题描述】:
我想创建一种更结构化的方法来加载所需的实体树:
我需要大量数据,因此我使用类型安全的包含(只是普通的包含,但使用 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
如您所见,这条充满包含的行会变得非常庞大。这实际上是一个非常简化的实际代码示例(顺便说一句,不包括房屋)
所以我想做的是创建方法,负责它在树中的分支。该方法可以接受对象查询并包含子对象,然后调用“子加载器方法”。此外,父级并不重要,只要它具有与子级类型相同的属性即可。
这可能没有多大意义:
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(...)
}
等等。但我无法真正理解它......传入的查询和调用子方法之间缺少链接。
有人做过这样的事吗?或者谁能给我一些指点?
【问题讨论】:
标签: entity-framework eager-loading aggregateroot