实体框架:执行大型查询

时间:2009-06-09 15:16:32

标签: performance entity-framework

我可能正在解决EF中一个更大的可用性问题。

我需要对模型的很大一部分进行计算。例如,假设我们需要一座建筑物,其所有门都是这些门的类别。但我还需要窗户,家具,屋顶等。

想象一下,我的逻辑还取决于这些类别背后的更多耦合表(子类别等)。

我们在代码中的很多方面需要大部分这个模型,所以我需要通过EF填充和链接整个模型。

为此,我们只是查询ObjectContext并使用type-safe includes。

但这实际上很容易出错。

有没有人有解决这类问题的建议?

1 个答案:

答案 0 :(得分:3)

使用投影仅获取所需的值,尤其是在您不打算更新所有内容时。你可能不需要家具等的每一个属性。所以不是检索实体本身,而是预测你想要的东西:

from b in Context.Buildings
where b.Id == 123
select new
{
    Name = b.Name,
    Rooms = from r in b.Rooms
            select new
            {
                XDimension = r.XDimension,
                // etc.

现在你再也不用担心是否装了东西;你需要的东西是加载的,你不需要的东西不是。生成的SQL也会非常简单。