entity-framework – EF:避免多个更新语句

像这样的代码:

var compIds = from p in packinglist.List
              select p.ComponentId;
var components = from c in context.Components
                 where compIds.Contains(c.Id)
                 select c;
 foreach (var item in components)
 {
     item.CurrentSiteId = packinglist.DestinationId;
 }
 context.SaveChanges();

结束发布大量的SQL语句

update [dbo].[Components] set [CurrentSiteId] = @0 where ([Id] = @1)

有没有办法指示EF(Code First)发出以下声明:

update [dbo].[Components] set [CurrentSiteId] = @0 where ([Id] in (....))

或者我应该考虑使用可用的SQLQuery方法之一,还是使用像Dapper这样的单独工具或者大量的……?

最佳答案 目前没有办法在EF 4开箱即可执行批量更新.有一些非常漫长而复杂的工作最终会产生SQL.我建议使用存储过程或T-SQL.这是我过去使用的快速T-SQL片段:

using (var context = new YourEntities())
{
    context.ExecuteStoreCommand(
                     @"UPDATE Components SET CurrentSiteId = 1 WHERE ID IN(1,2,3,4)");
}
点赞