我正在自己的上下文中执行代码,但是这导致数据在主线程上下文中不同步。因此,在其他上下文完成工作之后,我需要刷新实体,然后才能对其进行更新。
不幸的是,我遇到了OptimisticConcurrencyException异常,无法弄清楚到底是哪个实体,需要刷新吗?有没有一种方法可以找出导致OptimisticConcurrencyException的实体?此消息根本没有帮助...
最佳答案
也许最好的解决方案是在其他线程完成后在主线程上下文中仅创建一个新的context
。
否则,如果您需要重用context
,这是一种刷新上下文对象的便捷方法。
public void RefreshAll()
{
// Get all objects in state manager with entityKey
// (context.Refresh will throw an exception otherwise)
var refreshableObjects = (from entry in
ObjectContext.ObjectStateManager.GetObjectStateEntries(
EntityState.Deleted
| EntityState.Modified
| EntityState.Unchanged)
where entry.EntityKey != null
select entry.Entity);
ObjectContext.Refresh(RefreshMode.StoreWins, refreshableObjects);
}