ObjectContext.Refresh ()? - PullRequest
       24

ObjectContext.Refresh ()?

14 голосов
/ 17 ноября 2009

Как обновить ВСЕ грязные объекты из хранилища данных и сбросить их измененные значения до исходного значения хранилища?

Метод ObjectContext.Refresh требует в качестве параметра обновляемые объекты.

Ответы [ 4 ]

16 голосов
/ 17 ноября 2009

Обычно работает следующее:

Context.Refresh(RefreshMode.StoreWins, _
    Context.ObjectStateManager.GetObjectStateEntries())

Иногда это вызывает проблемы с EntityRelations. посмотрите на мой комментарий для получения дополнительной информации.

10 голосов
/ 13 июня 2013

Вы можете использовать этот код:

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 () и обновить контекст другими способами:

http://christianarg.wordpress.com/2013/06/13/entityframework-refreshall-loaded-entities-from-database/

0 голосов
/ 01 декабря 2010

Мы используем это:

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;
    });

Где "Контекст" - это контекст для обновления. Мы фильтруем по изменению состояния и объектов, чтобы избежать новых объектов и отношений.

0 голосов
/ 17 ноября 2009

Если вы хотите сбросить ВСЕ изменения, вы можете установить для ObjectContext значение null и повторно создать его экземпляр.

Я верю, что это достигнет того, что вы хотите.

Доброжелательность,

Dan

...