Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有一种方法可以强制实体框架在我枚举时一次从数据库中读取一条记录?_C#_.net_Entity Framework_Entity Framework 4 - Fatal编程技术网

C# 有没有一种方法可以强制实体框架在我枚举时一次从数据库中读取一条记录?

C# 有没有一种方法可以强制实体框架在我枚举时一次从数据库中读取一条记录?,c#,.net,entity-framework,entity-framework-4,C#,.net,Entity Framework,Entity Framework 4,有没有办法强制实体框架一次从数据库中读取一条记录 基本上是让它像一个SqlDataReader(我只需要向前读,我根本不会更改数据!) 为了简化我的问题,在下面的循环中,我希望EF在每次迭代中获得1个城市 var context = new CityEntities(); var cities = from c in context.Cities select c; foreach (var c in cities) { Console.WriteLine(

有没有办法强制实体框架一次从数据库中读取一条记录

基本上是让它像一个
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
}
为什么:因为我想利用强类型的优势编写查询,并防止在我的情况下以字符串形式编写查询。

您可以试试这个

while(cities.Any())
{
    var city = cities.First();
    cities = cities.Skip(1);
}

但最终可能会得到非常不理想的SQL。所以我强烈建议您一次加载所有记录。

实体框架实际上是一次读取一个实体。如果您在IQueryable上有一个foreach循环(即,您没有强制执行求值),那么实体框架将仅在您到达它时才具体化每个实体。这就是为什么在使用延迟加载时需要启用MARS(多个活动结果集)的原因-启动嵌套查询时,外部查询仍在进行中

编辑


在EF6中,默认策略是使用缓冲区来支持连接弹性。但是,如果不使用连接弹性,则可以关闭缓冲。

我不理解您希望这样做的原因,您可以添加更详细的说明吗?我不想加载内存中的所有城市。我需要一个接一个地穿过这些城市。每次一个城市。你将得到相同数量的城市。如果您真的一次只需要一个,那么需要大量sql查询。不要尝试优化不需要任何优化的东西:)也许我完全不需要了,以前发生过这种情况,我期待看到答案。由于您使用相同的上下文来提取结果,每个城市都将在循环结束时加载到内存中。所有记录都不能一次加载,如果你处理的是一千万行