我有以下代码,为了更好地理解,我总结了代码,每个删除语句中都有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。在一些罕见的情况下会发生这种情况。不是所有的时间。
在这种情况下我该怎么办?如何进行批量删除?如何在我的情况下回滚交易?
答案 0 :(得分:0)
免责声明:我是Entity Framework Extensions
的所有者此库允许您执行场景所需的所有批量操作:
甚至BulkSaveChanges。
它使用Entity Framework事务,因此如果您需要它,您只需从Entity Framework启动一个新事务。
实施例
// Easy to use
context.BulkSaveChanges();
// Easy to customize
context.BulkSaveChanges(bulk => bulk.BatchSize = 100);
// Perform Bulk Operations
context.BulkDelete(customers);
context.BulkInsert(customers);
context.BulkUpdate(customers);
// Customize Primary Key
context.BulkMerge(customers, operation => {
operation.ColumnPrimaryKeyExpression =
customer => customer.Code;
});