Caf*_*eek 6 concurrency entity-framework task-parallel-library
我正在他们自己的上下文中执行代码,但它导致数据在主线程上下文中不同步.所以我需要在其他上下文完成工作之后刷新实体,然后才能更新它.
不幸的是,我收到了一个OptimisticConcurrencyException并且无法确定哪个实体是问题并且需要刷新?有没有办法找出导致OptimisticConcurrencyException的实体?这条消息根本没用...
System.Data.Entity.Infrastructure.DbUpdateConcurrencyException:存储更新,插入或删除语句影响了意外的行数(0).自实体加载后,实体可能已被修改或删除.刷新ObjectStateManager条目.---> System.Data.OptimisticConcurrencyException:存储更新,插入或删除语句影响了意外的行数(0).自实体加载后,实体可能已被修改或删除.刷新ObjectStateManager条目.
也许最好的解决方案是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);
}
Run Code Online (Sandbox Code Playgroud)