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.
The following usually works:
Context.Refresh(RefreshMode.StoreWins, _
Context.ObjectStateManager.GetObjectStateEntries())
It sometimes causes problems with EntityRelations. look at my comment for further details.
GetObjectStateEntries()
requires a parameter (e.g. Modified), and when I pass one in I get an exception that the entity is disconnected from the context. Any ideas? –
Moskva 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:
var addedEntries = context.ObjectStateManager.GetObjectStateEntries(EntityState.Added).ToList(); addedEntries.ForEach(entry => entry.Delete());
–
Mohammadmohammed 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.
© 2022 - 2024 — McMap. All rights reserved.