【发布时间】:2016-12-23 21:51:46
【问题描述】:
我有下面的代码,为了更好地理解,总结了代码,我在每个删除语句中都有 try catch 块。 :-
foreach(var item in listEntry)
{
.. Calculation code
string deletedata = "DELETE FROM [" + schemaName + "].[OT] WHERE CompanyId=" + companyId + " AND EmployeeId = " + StrECode + " AND OTDate = '" + StrInputDate.ToString("yyyy-MM-dd") + "'";
ctx.Database.ExecuteSqlCommand(deletedata);
.. Large Calculation code
string deletedata1 = "DELETE FROM [" + schemaName + "].[ENTRY] WHERE CompanyId=" + companyId + " AND EmployeeId = " + StrECode + " AND EntryDate = '" + StrDate.ToString("yyyy-MM-dd") + "'";
ctx.Database.ExecuteSqlCommand(deletedata1);
}
BulkInsert(parameters);
BulkInsert(parameters);
我只是在 foreach 循环中删除记录,然后我正在执行批量插入。 一切正常,但现在数据量增加了。 foreach 循环了 50,000 次。
现在发生的事情是由于某种未知原因,应用程序在中间停止并且它在 foreach 的某处中断。因此数据被大量删除,并且没有执行批量插入,因此存在大量数据丢失。
我没有收到任何错误,因为我也有日志,但应用程序没有到达 BulkInsert。这种情况在极少数情况下会发生,而不是一直发生。
在这种情况下我能做什么?如何执行批量删除?在我的情况下如何回滚事务?
【问题讨论】:
-
您使用的是 EF6 吗? (您的内部 foreach 计算是否使用已删除的项目?为什么不在 foreach 之后删除它们)
-
另外,通过 EF 加载这么多数据 50,000 多个项目也是一种不好的做法,您可能会考虑小批量处理整个事情(加载完整列表时使用一些分页)
-
@AndreiFilimon 我在这个页面运行一个大进程,没有分页的范围,是一种薪资处理,
-
@AndreiFilimon 我正在使用 EF 6
-
已在此处提供解决方案:stackoverflow.com/questions/11592176/…
标签: entity-framework linq asp.net-mvc-4 model-view-controller