有没有更好的方法来制定这个实体框架4更新?

时间:2012-05-22 19:03:09

标签: linq entity-framework

我有以下代码:

List<Item> csItems = (from i in context.Items
                      where i.CSItem == true
                      select i).ToList<Item>();
csItems.ForEach(i => i.Active = false);
context.SaveChanges();

看起来这样效率非常低,因为我必须首先读取整个表,然后更新表。有没有更好的方法来做到这一点,我只是在没有阅读所有内容的情况下进行更新?

2 个答案:

答案 0 :(得分:2)

Linq2EF没有内置的批量更新,但您可以使用Alex Jamesarticles自行完成,实际上您应该自己实施。简单的方法是使用存储过程。但是如果你想自己拥有它,你可以阅读所有4篇文章系列,它们很容易阅读。

答案 1 :(得分:1)

无需构建项目的List<T>。我个人只会枚举结果并设置值:

IQueryable<Item> csItems = (from i in context.Items
                  where i.CSItem == true
                  select i);
foreach(var item in csItems)
     item.Active = false;

context.SaveChanges();

请注意,Entity Framework没有内置批量更新功能,因此执行更高效的操作需要some other technique