[英]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" });
目標代碼:
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.