2012-05-22 78 views
1

我有以下代碼:有沒有更好的方式來制定這個實體框架4更新?

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

好像這是效率極其低下,因爲我有讀取整個表中第一,然後更新表。有沒有更好的方法來做到這一點,以便我只做一次更新而不讀取所有內容?

回答

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(); 

請注意,有內置的實體框架沒有批量更新功能,所以做一些更有效率的需要some other technique

2

Linq2EF沒有內置的批量更新,但您可以使用Alex James,articles自己做,實際上您應該自己實現它。另外簡單的方法是使用存儲過程。但如果你想擁有它,你可以閱讀所有4篇文章系列,它們很容易閱讀。

相關問題