New*_*zey 0 c# linq-to-entities entity-framework asp.net-mvc-3
据我所知,以下代码对“ 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();
}
Run Code Online (Sandbox Code Playgroud)
我想做的是立即返回新近更新的记录以进行进一步处理,本质上是重新查询刚刚进行的更改:
public List<vcData> GetTableData()
{
var result = (from td in _entities.vcData
where td.SiteID == "MySite"
select td).ToList();
return result;
}
Run Code Online (Sandbox Code Playgroud)
在我的控制器代码中,我正在尝试执行以下操作:
_currentvcTickerDataList = Repository.UpdateDisplayAndUrl(vcUnupdatedDataList);
//.....do more stuff with _currentvcTickerDataList, which ought to contain updated information, should it not?
Run Code Online (Sandbox Code Playgroud)
问题:该GetTableData()方法似乎不返回更新后的值,而仅返回先前(未更新)的值。
我是LINQ,实体框架和MVC的新手,因此我可以肯定我缺少一些基本知识。
您需要设置的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;
}
Run Code Online (Sandbox Code Playgroud)