我正在处理大量数据。为了加快EF,我发现在块中调用SaveChanges()
有帮助。此外,我读到每隔一段时间重置上下文也会加快速度。我无法实现这一点。
context = new Context();
List<object> results = context.someQuery.ToList();
// do stuff to results to get it ready for processing in the for loop
for (int i = 0; i < results.Count; i++)
{
// do stuff like Add and Modify
if (results[i] == target)
context.myDataSet.DeleteObject(target);
if (i % 10 == 0)
context.SaveChanges();
if (i % 100 == 0)
{
context.Dispose();
context = new Context();
}
}
重置上下文后似乎DeleteObject()
无效。我能做些什么才能让这些方面有所作为呢?我真的不想重新查询数据库(即,将查询移动到for循环中并在每次重置上下文时再次执行),因为我对它进行了大量的预处理并且不需要#39 ;我想继续重复这个。
答案 0 :(得分:0)
尝试
using(var context = new Context())
{
context.Entry(new Entity { Id = 5} ).State = Deleted;
context.SaveChanges();
}
答案 1 :(得分:0)
我认为你可以使用交易(或工作单位模式作为更好的解决方案)处理这个问题:
context = new Context();
var transaction = context.Database.BeginTransaction();
List<object> results = context.someQuery.ToList();
// do stuff to results to get it ready for processing in the for loop
for (int i = 0; i < results.Count; i++)
{
// do stuff like Add and Modify
if (results[i] == target)
context.myDataSet.DeleteObject(target);
if (i % 10 == 0)
context.SaveChanges();
if (i % 100 == 0)
{
transaction.Commit();
transaction.BeginTransaction();
}
}
如果您的查询出错,是否必须回滚?如果是,请查看Unit of Work pattern