【问题标题】:Entity Framework: Bulk UpdateFromQuery in Batches实体框架:批量批量UpdateFromQuery
【发布时间】:2020-12-07 05:55:57
【问题描述】:

我想对一百万多行执行批量更新。

但是,我不想更新整个表,而是分批更新(以防止锁定整个表)。每 10,000 行说一次。

例如,类似于这个答案:How to update large table with millions of rows in SQL Server?

目前使用 UpdateFromQuery 不加载整个上下文,直接更新数据库。

现在如何批量更新?我应该使用.Take 函数吗?

var productUpdate = _dbContext.Set<Product>()
    .Where(x => x.ProductType == 'Electronics')
    .UpdateFromQuery( x => new Product { ProductBrand = "ABC Company" });

目标代码:

How to update large table with millions of rows in SQL Server?

SET @BatchSize = 10000;

SET @Rows = @BatchSize; -- initialize just to enter the loop

BEGIN TRY    
  WHILE (@Rows = @BatchSize)
  BEGIN
      UPDATE TOP (@BatchSize) prod
      SET Value = 'ABC Company'
      FROM dbo.Products prod
      WHERE prod.ProductType = 'Electronics'
   SET @Rows = @@ROWCOUNT;
 END;

注意:目前除非需要,否则不要使用 RawSql

【问题讨论】:

标签: c# .net entity-framework asp.net-core entity-framework-plus


【解决方案1】:

免责声明:我是项目的所有者Entity Framework Plus

目前无法使用BatchSize 进行更新。

但是,我们将对其进行研究并提供此功能。

一旦功能发布,我会更新这个答案。


编辑:答案更新

从 v3.0.61 开始,SQL Server 现在支持 BatchSize 选项。

您现在可以在使用UpdateFromQuery 时指定BatchSize

【讨论】:

  • 您好,您知道预计功能发布日期吗? 6-12个月?感谢您的所有帮助!
  • cc @JonathonMagnan,你能想到任何解决方法吗?类似于问题参考,谢谢
  • @Artportraitdesign1,延迟取决于我的开发人员。他这周应该试试,所以如果一切顺利,下周就会有新版本,我还不能保证。目前没有解决方法来获得这种期望的行为。
猜你喜欢
  • 2014-09-23
  • 1970-01-01
  • 2018-12-03
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多