微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

实体框架:批量批量UpdateFromQuery

如何解决实体框架:批量批量UpdateFromQuery

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

但是,我不想更新整个表,而是要以较小的批次进行更新(以防止锁定整个表)。每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

解决方法

免责声明:我是项目Entity Framework Plus

的所有者

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

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

功能发布后,我将更新此答案。


编辑:答案更新

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。