关于EF的另一个问题:
我想知道在迭代查询结果时幕后会发生什么。
例如,请查看以下代码:
var activeSources = from e in entitiesContext.Sources
where e.IsActive
select e;
然后:
foreach (Source currSource in allSources)
{
code based on the current source...
}
重要提示:每次迭代都需要一段时间才能完成(从1到25秒)。
现在,我假设EF基于DataReaders以获得最大效率,因此基于该假设,我认为在上述情况下,数据库连接将保持打开,直到我完成迭代结果,这将是一个非常很长一段时间(在谈论代码时),这是我显然不想要的。
有没有办法获取整个数据,就像我用普通的旧ADO.NET DataAdapters,DataSet和fill()方法而不是使用DataReaders一样?
或者我的假设可能已经过时了?
无论如何,如果有的话,我会很乐意指出一个好的消息来源解释这个。
谢谢,
米奇
答案 0 :(得分:3)
如果您想预先获取所有数据,与Fill()
类似,则需要强制执行查询。
var activeSources = from e in entitiesContext.Sources
where e.IsActive
select e;
var results = activeSources.ToList();
调用ToList()
后,您将拥有数据并与数据库断开连接。
答案 1 :(得分:1)
如果要立即返回所有结果,请使用.ToList();然后不会发生延迟执行。
var activeSources = (from e in entitiesContext.Sources
where e.IsActive
select e).ToList();