有没有办法强制执行实体框架在一次读取从数据库的一个记录,而我列举?(Is there a way t

2019-09-30 05:20发布

有没有办法强制执行实体框架在一次读取从数据库的一个记录?

基本上,使它像一个工作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
}

为什么 :因为我想通过使用强类型的优势,防止编写查询,在我的案件串写的查询。

Answer 1:

实体框架是实际读取一个实体在一个时间。 如果您对IQueryable的foreach循环(即你没有强制评估)只有当你得到它的实体框架将兑现每个实体。 这就是为什么你需要有MARS(多个活动结果集)启用使用延迟加载时的原因 - 外部查询工作仍在进行中,当你开始一个嵌套查询。

编辑

在EF6默认的策略,现在是缓冲,能够支持连接弹性。 然而,如果不使用连接弹性缓冲可以被关闭。



Answer 2:

你可以试试这个

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?