首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Entity Framework 6大表批量更新

Entity Framework 6大表批量更新
EN

Stack Overflow用户
提问于 2017-03-08 17:45:30
回答 2查看 2.7K关注 0票数 1

我是实体框架的新手,所以我希望这不是一句废话。

基本上我有一个大的,上面有30000到100000条记录。

代码语言:javascript
复制
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表,这就是我的噩梦开始的地方。例如,像下面这样的基本操作需要花费大量的时间

代码语言:javascript
复制
var idTotalPair = tmp.Select(x => new {x.EndItemID, x.Total}).ToArray(); 

我做了一些研究,发现EF不支持批量操作,也不支持存储过程的TableTyped参数。

因此,我假装的是找到最好的(性能)方法来在每次总计计算后更新所有这些记录。任何帮助都将非常感谢:)

提前感谢

EN

回答 2

Stack Overflow用户

发布于 2017-03-08 18:18:51

您可以使用原始命令。类似于:

代码语言:javascript
复制
   using (var context = new MyContext()) 
   { 
       context.Database.ExecuteSqlCommand( 
           "UPDATE EndItem SET Total = ... WHERE EndItemId = ..."); 
   }
票数 0
EN

Stack Overflow用户

发布于 2017-03-08 22:17:48

最有效的方式是@jeroenh注释。如果可能的话,把所有的东西都放在一个存储过程中。

免责声明:我是Entity Framework Extensions的所有者

此库不是免费的,但允许您针对此类场景执行批量更新和其他操作:

  • 批量更新插入
  • 批量删除
  • 批量更新
  • 批量合并

示例

代码语言:javascript
复制
// 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;
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42667876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档