【发布时间】:2009-08-17 13:04:41
【问题描述】:
我继承了一些代码,我当前的任务是提高它的性能。我马上就注意到了一个包含延迟加载的子元素的 foreach 循环。我正在尝试删除延迟加载,因为在下面的示例中,将对数据库进行 1 + (3 * n) 次调用!
using (BaseEntityConnection BaseEntityContext = new BaseEntityConnection()) {
List<Parents> entities = BaseEntityContext.CallASproc(storeOrgLevelId, startDate, endDate).ToList<Parents>();
foreach (Parents entity in entities)
{
entity.Child1Reference.Load();
entity.Child2Reference.Load();
entity.Child3Reference.Load();
}
}
我最初的想法是使用 .Include() ,但是当我最初调用 sproc 时,我不明白这是怎么可能的。 (假设目前 sproc 不能推广到 Linq to 实体。)我还认为,如果我在调用 sproc 之前使用 Linq to Entities 加载子实体,那么上下文中的跟踪管理器将使用“身份” Map' 以识别已加载的实体,因此会发现当我调用 .Load() 时它不需要访问数据库。但是,我想我还必须在每个子引用上调用 .Attach() - 但这似乎很笨重,我还没有让它工作!!
有人知道我如何以最少的数据库往返次数为存储过程返回的实体加载对象图吗?
【问题讨论】:
标签: .net entity-framework