2012-03-13 75 views
0

至於我可以告訴大家,通過下面的代碼爲「mysite的」對數據庫所做的改變是立竿見影:如何更新程序後,立即重新查詢更新的值運行

public List<vcData> UpdateDisplayAndUrl(List<vcData> vcDataList) 
    { 
     foreach (vcData vcData in vcDataList) 
     { 
      _entities.ExecuteStoreCommand("UPDATE vcData SET DisplayItem = {0}, DisplayUrl = {1} WHERE ID = {2} ", vcData.DisplayItem, vcData.DisplayUrl, vcData.ID); 
     }     
     return GetTableData(); 
    } 

我想什麼做的是立即返回作進一步處理新近更新的記錄,從本質上講,重新查詢剛剛所做的更改:

public List<vcData> GetTableData() 
    { 
     var result = (from td in _entities.vcData 
         where td.SiteID == "MySite" 
         select td).ToList(); 
     return result; 
    } 

在我的控制器代碼中,我試圖做這樣的事情:

_currentvcTickerDataList = Repository.UpdateDisplayAndUrl(vcUnupdatedDataList); 
//.....do more stuff with _currentvcTickerDataList, which ought to contain updated information, should it not? 

問題:GetTableData()方法似乎沒有返回更新後的值,只返回前一個(未更新的)值。

我是LINQ,實體框架和MVC的新手,所以我很肯定有一些基本的東西我缺少。

回答

4

在查詢之前,您需要將MergeOption設置爲OverwriteChanges。請仔細閱讀msdn中介紹的MergeOptions以獲取清晰的想法。

public List<vcData> GetTableData() 
{ 
    var currentMergeOption = _entities.vcData.MergeOption; 
    _entities.vcData.MergeOption = MergeOption.OverwriteChanges; 

    var result = (from td in _entities.vcData 
        where td.SiteID == "MySite" 
        select td).ToList(); 

    //revert the change 
    _entities.vcData.MergeOption = currentMergeOption; 

    return result; 
} 
+0

Eranga,非常感謝。這似乎已經成功了。感謝您參閱MSDN參考文章。 – NewJoizey 2012-03-13 13:58:10