EF:避免多个更新语句

时间:2011-08-05 17:03:30

标签: entity-framework ef-code-first

这样的代码:

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这样的单独工具或者大量的......?

2 个答案:

答案 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本身无法做到这一点。