2014-03-02 62 views
1

我是Entity框架的新手,並且好奇最好的方法是如何用新數據記錄更新所有表格。我有一個方法返回更新記錄的對象列表。大部分信息保持不變;只有兩個字段將被更新。 目前我創建了兩種更新方式。 第一個是從數據庫表中獲取數據,並從兩個Lists迭代找到匹配和更新匹配:實體框架:更新大量表格記錄的更好方法

var previousDatafromTable= db.Widgets.ToList(); 
var newDataReturnedFromMethod =....... 

      foreach (var d in previousDatafromTable) 
      { 
       foreach (var l in newDataReturnedFromMethod) 
       { 
        if (d.id == l.id) 
        { 
         d.PositionColumn = l.PositionColumn; 
         d.PositionRow = l.PositionRow; 

        } 
       } 

第二個是:

foreach (var item in newDataReturnedFromMethod) 
      { 
       var model = db.Widgets.Find(item.id);     
       model.PositionColumn = item.PositionColumn; 
       model.PositionRow = item.PositionRow;    
      } 

我通過迭代更新數據並通過ID更新我的數據庫表。

所以我很想知道哪種方法是更好的方法,也許在Entity Framework中有一個選項來衡量這兩個任務的性能?感謝您的回答。

回答

2

兩者都不是真的有效。

對於previousDatafromTable的每次迭代,第一個選項通過newDataReturnedFromMethod循環。這是很多迭代。

第二個選項可能會爲newDataReturnedFromMethod的每次迭代執行數據庫查詢。

這是更爲有效的加入:

var query = from n in newDataReturnedFromMethod 
      join p in previousDatafromTable on n.id equals p.id 
      select new { n,p }; 

foreach (var pair in query) 
{ 
    pair.p.PositionColumn = pair.n.PositionColumn; 
    pair.p.PositionRow = pair.n.PositionRow;    
} 

EF不具有內置的性能測量。您通常會使用一個分析器,或者類別爲StopWatch