在 EF 6.x (6.1.3) 中,下面的代码将让您找到所有更改;您在问题中提出的方式!
try
{
var listOfRefreshedObj = db.ChangeTracker.Entries().Select(x => x.Entity).ToList();
var objContext = ((IObjectContextAdapter)your_db_context).ObjectContext;
objContext.Refresh(System.Data.Entity.Core.Objects.RefreshMode.ClientWins, listOfRefreshedObj);
await db.Entry(<yourentity>).ReloadAsync();
return Content(HttpStatusCode.<code>, "<outputmessage>"); ;
}
catch (Exception e)
{
return Content(HttpStatusCode.<code>, "<exception>");
}
说明:Entries
在列表中
查询ChangeTracker
并将它们存储在列表中
var listOfRefreshedObj = db.ChangeTracker.Entries().Select(x => x.Entity).ToList();
接下来是刷新上下文。在某些情况下(行被删除等),这将引发您可以捕获的异常。RefreshMode.ClientWins
告诉 EF 在下次更新时接受所有已修改的客户端单元。在某些情况下,您可能希望提示用户进行更改并让他们决定。刷新模式枚举。一个例子在这里ObjectContext.Refresh 方法示例
objContext.Refresh(System.Data.Entity.Core.Objects.RefreshMode.ClientWins, listOfRefreshedObj);
无论如何,您可能正在做这整件事DbUpdateConcurrencyException
!