有没有办法强制执行实体框架在一次读取从数据库的一个记录?
基本上,使它像一个工作SqlDataReader
(我需要只读前,我将不会改变的数据!)
为了简化我问一个例子,在下面的循环,我想EF获得1个城市在每次迭代。
var context = new CityEntities();
var cities = from c in context.Cities
select c;
foreach (var c in cities) {
Console.WriteLine(c); // I want to have only 1 city in the memory at this point
}
为什么 :因为我想通过使用强类型的优势,防止编写查询,在我的案件串写的查询。
实体框架是实际读取一个实体在一个时间。 如果您对IQueryable的foreach循环(即你没有强制评估)只有当你得到它的实体框架将兑现每个实体。 这就是为什么你需要有MARS(多个活动结果集)启用使用延迟加载时的原因 - 外部查询工作仍在进行中,当你开始一个嵌套查询。
编辑
在EF6默认的策略,现在是缓冲,能够支持连接弹性。 然而,如果不使用连接弹性缓冲可以被关闭。
你可以试试这个
while(cities.Any())
{
var city = cities.First();
cities = cities.Skip(1);
}
但是你可以用很unoptimal SQL结束。 所以我强烈建议你加载的所有记录一次。
文章来源: Is there a way to enforce Entity Framework to read one record from Db at a time while I enumerate?