【问题标题】:How to requery updated values immediately after update procedure runs如何在更新过程运行后立即重新查询更新的值
【发布时间】:2012-03-13 04:04:00
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    查询前需要将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;
    } 
    

    【讨论】:

    • 埃兰加,非常感谢。这似乎成功了。感谢您提供 MSDN 参考文章。
    猜你喜欢
    • 1970-01-01
    • 2014-11-16
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多