我是否可以强制实体框架将所有数据加载到内存中?

时间:2015-01-23 09:26:00

标签: c# entity-framework linq-to-entities

Entity Framework中是否有一种内置方式可以强制将所有数据加载到内存中(例如每次迭代只加载50个实体),直到没有任何内容可以加载?

1 个答案:

答案 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
 }