【问题标题】:Bulk Delete in MVCMVC 中的批量删除
【发布时间】: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


【解决方案1】:

免责声明:我是Entity Framework Extensions的所有者

此库允许您执行场景所需的所有批量操作:

  • 批量插入
  • 批量删除
  • 批量更新
  • 批量合并

甚至 BulkSaveChanges。

它使用实体框架事务,所以如果你需要它,你只需要从实体框架开始一个新的事务。

例子

// 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;
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2012-06-04
    • 1970-01-01
    • 2013-04-22
    • 2021-03-07
    • 2010-12-18
    相关资源
    最近更新 更多