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.
The following usually works:
Context.Refresh(RefreshMode.StoreWins, _
Context.ObjectStateManager.GetObjectStateEntries())
It sometimes causes problems with EntityRelations. look at my comment for further details.
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:
http://christianarg.wordpress.com/2013/06/13/entityframework-refreshall-loaded-entities-from-database/
If you want to reset ALL the changes, you could set the ObjectContext
to null and re-instantiate it.
I believe this will achieve what you want.
Kindness,
Dan
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.
精彩评论