簡體   English   中英

實體框架:批量批量UpdateFromQuery

[英]Entity Framework: Bulk UpdateFromQuery in Batches

我想對一百萬多行執行批量更新。

但是,我不想更新整個表,而是小批量更新(以防止鎖定整個表)。 每 10,000 行說一次。

例如,類似於此答案: 如何在 SQL Server 中更新具有數百萬行的大型表?

目前使用 UpdateFromQuery 不加載整個上下文,並直接更新數據庫。

現在如何批量更新? 我應該使用.Take Function 嗎?

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

目標代碼:

如何更新SQL服務器中百萬行的大表?

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 服務器支持BatchSize選項。

您現在可以在使用UpdateFromQuery時指定BatchSize

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM