我是实体框架的新手,所以我希望这不是一句废话。
基本上我有一个大的,上面有30000到100000条记录。
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用新的Total更新整个SQL表,这就是我的噩梦开始的地方。例如,像下面这样的基本操作需要花费大量的时间
var idTotalPair = tmp.Select(x => new {x.EndItemID, x.Total}).ToArray(); 我做了一些研究,发现EF不支持批量操作,也不支持存储过程的TableTyped参数。
因此,我假装的是找到最好的(性能)方法来在每次总计计算后更新所有这些记录。任何帮助都将非常感谢:)
提前感谢
发布于 2017-03-08 18:18:51
您可以使用原始命令。类似于:
using (var context = new MyContext())
{
context.Database.ExecuteSqlCommand(
"UPDATE EndItem SET Total = ... WHERE EndItemId = ...");
}发布于 2017-03-08 22:17:48
最有效的方式是@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;
});https://stackoverflow.com/questions/42667876
复制相似问题