像这样的代码:
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)");
}