ObjectContext.Refresh()?
Как обновить ВСЕ грязные объекты из хранилища данных и сбросить их измененные значения до первоначального значения хранилища?
Метод ObjectContext.Refresh в качестве параметра требует обновления сущностей.
4 ответа
Следующее обычно работает:
Context.Refresh(RefreshMode.StoreWins, _
Context.ObjectStateManager.GetObjectStateEntries())
Иногда это вызывает проблемы с EntityRelations. посмотрите на мой комментарий для более подробной информации.
Вы можете использовать этот код:
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);
}
Я написал пост о том, как RefreshAll() и обновить контекст некоторыми другими способами:
Мы используем это:
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;
});
Где "Контекст" - это контекст для обновления. Мы фильтруем по изменению состояния и сущностей, чтобы избежать новых сущностей и отношений.
Если вы хотите сбросить ВСЕ изменения, вы можете установить ObjectContext
обнулить и восстановить его.
Я верю, что это достигнет того, что вы хотите.
Kindness,
Дэн