这样的代码:
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这样的单独工具或者大量的......?
答案 0 :(得分:2)
目前没有办法在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)");
}
答案 1 :(得分:0)
最简单的答案就是编写该查询并使用DbContext.SQLQuery()
来运行它。如上所述,EF本身无法做到这一点。