Entity Framework中是否有一种内置方式可以强制将所有数据加载到内存中(例如每次迭代只加载50个实体),直到没有任何内容可以加载?
答案 0 :(得分:0)
是如果一次加载太多,EF会变慢。 经常一次加载所有记录并不理想。 最好的方法是每次都获得一个新的上下文。 使用 ORDERby SKIP TAKE 循环。获取n recs跳过已处理的记录。 假设:新记录和删除等可能会干扰简单的循环。所以仔细考虑这些条件。 样本循环
var done = false;
var n = 0;
while (!done) {
var MyContext = new DbContext(... your constructor params ); // easiest to dump the previous set. New each time !
var myDataBucket = MyContext.Set<TPoco>() // the table in question
.Where(t=> true) // any required logic to make sure data hasnt changed in the loop. And what if someone deletes a record in this process ?
.OrderBy(t=>t.Id) // you need a sort field
.Skip(50*n) //
.Take(50);
// whatever check to see if you processed everything, eg
if (mybucket == null || !mybucket.Any()) {
done = true;
}
// do something with 50 entries....
n++ // ready for next set
}