繁体   English   中英

实体框架 - 幕后:DataReaders 和连接生命周期

[英]Entity Framework - behind the scenes: DataReaders and connection life period

关于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、DataSets 和 fill() 方法而不是使用 DataReaders 那样来获取整个数据?

或者,也许我的假设与我的假设相去甚远?

无论如何,如果有的话,我很乐意被指出一个很好的来源来解释这一点。

谢谢,

米奇

如果您想预先获取所有数据,类似于Fill() ,您需要强制执行查询。

var activeSources = from e in entitiesContext.Sources
                    where e.IsActive
                    select e;

var results = activeSources.ToList();

调用ToList()后,您将获得数据并与数据库断开连接。

如果您想一次返回所有结果,请使用.ToList(); 然后不会发生延迟执行。

var activeSources = (from e in entitiesContext.Sources
                where e.IsActive
                select e).ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM