[英]Entity Framework 6 large table bulk update
我是實體框架的新手,所以我希望這不是廢話。
基本上,我有一個大型文件,上面有30000至100000個記錄。 從根本上講,每個記錄上有趣的字段是ID和總計,必須在應用程序端進行計算。
因此,我正在獲取記錄,將它們投影到業務邏輯類中,以執行各種計算並將新的總計分配給該類。
var validPriceVersionID = context.PriceVersion.Where(f => f.Status == "VALID").FirstOrDefault().PriceVersionID;
var tmp = context.EndItem.Where(f => f.Total == 0).Project().To<EndItem>().ToList();
tmp.Select(c => { c.PriceVersionID = validPriceVersionID; return c; }).ToList();
現在,我需要根據ID使用新的總計更新整個SQL表,這就是我噩夢開始的地方。 例如,以下基本內容需要花費大量時間
var idTotalPair = tmp.Select(x => new {x.EndItemID, x.Total}).ToArray();
我進行了一些研究,發現EF不支持批量操作,並且不支持用於存儲過程的TableTyped參數。
因此,我假裝的是在每次“總計”計算之后找到最佳的(性能)方法來更新所有這些記錄。 任何幫助將不勝感激:)
提前致謝
您可以使用原始命令。 就像是:
using (var context = new MyContext())
{
context.Database.ExecuteSqlCommand(
"UPDATE EndItem SET Total = ... WHERE EndItemId = ...");
}
最有效的方法是@jeroenh注釋。 盡可能將所有內容存儲在存儲過程中。
免責聲明 :我是Entity Framework Extensions的所有者
該庫不是免費的,但允許您針對這種情況執行批量更新和其他操作:
例
// Easy to use
context.BulkSaveChanges();
// Easy to customize
context.BulkSaveChanges(bulk => bulk.BatchSize = 100);
// Perform Bulk Operations
context.BulkDelete(endItems);
context.BulkInsert(endItems);
context.BulkUpdate(endItems);
// Customize Primary Key
context.BulkMerge(endItems, operation => {
operation.ColumnPrimaryKeyExpression =
endItem => endItem.Code;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.