Entity Framework 6 or Core - 使用 "DataReader" 类似模式读取查询结果
Entity Framework 6 or Core - Read query result with a "DataReader" like pattern
有没有办法在 EF DBContext 上以 'Typed Data Reader' 的形式获取 LINQ 查询结果,这样当我读取 de IQueryable 结果(例如使用 .ToList())时,我不将所有结果存入内存?
我期待这样的事情(或类似的事情):
var personQueryResult=dbContext.People.Where(…).Select(…).AsDataReader();
foreach(person in personQueryResult){
//Here I expect that person is typed of the People Dbset<T> type, ex. a Person type and i can do:
person.Name="...";
person.Surname="...";
//etc.
}
没有明确的方法可以确保您可以通过 DbDataReader 滚动集合。
了解 EF 基 类 的继承层次结构,foreach
在 DbSet<T>,IQueryable<T>
或 IEnumerable<T>
上的每次使用,避免任何会触发查询延迟执行(例如 ToList()
)将阻止加载内存中的所有记录,以便在枚举器的每个 "MoveNext()" 将使用底层 DbDataReader
的 "Read()" .
有没有办法在 EF DBContext 上以 'Typed Data Reader' 的形式获取 LINQ 查询结果,这样当我读取 de IQueryable 结果(例如使用 .ToList())时,我不将所有结果存入内存?
我期待这样的事情(或类似的事情):
var personQueryResult=dbContext.People.Where(…).Select(…).AsDataReader();
foreach(person in personQueryResult){
//Here I expect that person is typed of the People Dbset<T> type, ex. a Person type and i can do:
person.Name="...";
person.Surname="...";
//etc.
}
没有明确的方法可以确保您可以通过 DbDataReader 滚动集合。
了解 EF 基 类 的继承层次结构,foreach
在 DbSet<T>,IQueryable<T>
或 IEnumerable<T>
上的每次使用,避免任何会触发查询延迟执行(例如 ToList()
)将阻止加载内存中的所有记录,以便在枚举器的每个 "MoveNext()" 将使用底层 DbDataReader
的 "Read()" .