如何在更新过程运行后立即重新查询更新的值

时间:2012-03-13 04:04:01

标签: c# asp.net-mvc-3 entity-framework linq-to-entities

据我所知,以下代码对“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的新手,所以我很确定我缺少一些基本的东西。

1 个答案:

答案 0 :(得分: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;
}