How to update ALL the dirty entities from the data store, and reset their changed values to the original store value?
The method ObjectContext.Refresh requires as a parameter the entities to be refreshed.
How to update ALL the dirty entities from the data store, and reset their changed values to the original store value?
The method ObjectContext.Refresh requires as a parameter the entities to be refreshed.
We use this:
return Context.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Deleted
System.Data.EntityState.Modified).All(ose
=> {
if(ose.Entity != null)
Context.Refresh(RefreshMode.StoreWins, ose.Entity);
return true;
});
Where "Context" is the context to refresh. We filter by change state and entities to avoid new entities and relations.
You can use this code:
public void RefreshAll()
{
// Get all objects in statemanager with entityKey
// (context.Refresh will throw an exception otherwise)
var refreshableObjects = (from entry in context.ObjectStateManager.GetObjectStateEntries(
EntityState.Deleted
| EntityState.Modified
| EntityState.Unchanged)
where entry.EntityKey != null
select entry.Entity);
context.Refresh(RefreshMode.StoreWins, refreshableObjects);
}
I wrote a post on how to RefreshAll() and refresh the context in some other ways:
The following usually works:
It sometimes causes problems with EntityRelations. look at my comment for further details.