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