在MVC中批量删除

时间:2016-12-23 10:51:20

标签: entity-framework linq asp.net-mvc-4 model-view-controller

我有以下代码,为了更好地理解,我总结了代码,每个删除语句中都有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。在一些罕见的情况下会发生这种情况。不是所有的时间。

在这种情况下我该怎么办?如何进行批量删除?如何在我的情况下回滚交易?

1 个答案:

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