2012-03-13 74 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