2011-10-22 9 views

Odpowiedz

13

Prawdopodobnie patrzysz na DbContext, który nie ma metody Refresh. Możesz użyć interfejsu IObjectContextAdapter, aby uzyskać podstawowy ObjectContext i wywołać odświeżenie tego.

var objectContext = ((IObjectContextAdapter)context).ObjectContext; 
+0

Kudos "dryfujący", uratowałeś mi dzień. Jest tam * wiele * odpowiedzi na to pytanie, a twoja jest zdecydowanie najlepsza! Czy to naprawdę szkoda, że ​​DbContext nie obsługuje bezpośredniego odświeżania? Wydaje się, że jest to bardzo powszechny wzór w aplikacjach wielowarstwowych. Zbliżałem się do czytania tego obiektu i kopiowania tego, co zmieniło się, zanim zobaczyłem twoją odpowiedź :-) – Joe

2

Można również skorzystać z funkcji Odśwież na Pełnomocnik Przedmioty ... Oto przykład, aby przeładować wszystkie zmodyfikowane obiekty:

  var modifiedEntries = context.ChangeTracker.Entries() 
       .Where(e => e.State == EntityState.Modified); 
      foreach (var modifiedEntry in modifiedEntries) { 
       modifiedEntry.Reload(); 
      } 
0

odpowiedź w tym wątku może pomóc też: Refresh entity instance with DbContext

Podsumowując jednak, możesz spróbować nazywając coś jak następuje:

dbContext.Entry(someEntityObjectInstance).Reload(); 

Jednak ktoś zauważył, że to nie odświeża właściwości nawigacji, więc jeśli musisz się martwić o odświeżanie właściwości nawigacji, musisz albo ponownie załadować() wszystkie właściwości nawigacji, albo musisz odłączyć() lub Refresh() po rzutowaniu na IObjectContextAdapter, lub po prostu odtwórz swój DbContext.

W moim przypadku, ja szczerze zdecydował, że najlepiej po prostu odtworzyć kontekst i re-Find() jednostka:

dbContext = new Model.Entities(); 
someEntityObjectInstance = dbContext.SomeEntityType.Find(someEntityObjectInstanceKey); 

Jest prawdopodobnie nie prosty/najlepsza odpowiedź tutaj.

Powiązane problemy