Najlepszym sposobem na odświeżenie jednostek w kontekście jest usunięcie kontekstu i utworzenie nowego.
Jeśli naprawdę potrzebujesz odświeżyć jakąś jednostkę i używasz podejścia Code First z klasą DbContext, możesz użyć
public static void ReloadEntity<TEntity>(
this DbContext context,
TEntity entity)
where TEntity : class
{
context.Entry(entity).Reload();
}
Aby ponownie wczytać właściwości nawigacji kolekcji, możesz użyć
public static void ReloadNavigationProperty<TEntity, TElement>(
this DbContext context,
TEntity entity,
Expression<Func<TEntity, ICollection<TElement>>> navigationProperty)
where TEntity : class
where TElement : class
{
context.Entry(entity).Collection<TElement>(navigationProperty).Query();
}
Źródła:
https://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbentityentry.reload(v=vs.113).aspx#M:System.Data.Entity.Infrastructure.DbEntityEntry .Przeładować
context.ReloadNavigationProperty(parent, p => p.Children);
jeśli maszclass Parent { ICollection<Child> Children; }
context.Entry(order).Collection(o => o.NavigationProperty).Query().Load();
źródło
Jeśli chcesz ponownie załadować określone jednostki, z DbContextApi, RX_DID_RX już udzielił odpowiedzi.
Jeśli chcesz przeładować / odświeżyć wszystkie załadowane encje:
Jeśli używasz Entity Framework 4.1+ (prawdopodobnie EF5 lub EF 6), interfejs API DbContext:
Jeśli używasz entityFramework 4 (ObjectContext API):
W każdym razie najlepszą radą jest użycie „kontekstu krótkotrwałego”, a unikniesz tego rodzaju problemów.
Napisałem kilka artykułów na ten temat:
https://christianarg.wordpress.com/2013/06/13/entityframework-refreshall-loaded-entities-from-database/
źródło
Użyj metody Odśwież :
lub alternatywnie pozbądź się obecnego kontekstu i utwórz nowy.
źródło
((IObjectContextAdapter)dbContext).ObjectContext
Context.Reload () nie działał dla mnie w MVC 4, EF 5, więc zrobiłem to.
i działa dobrze.
źródło
EF 6
W moim scenariuszu Entity Framework nie odebrał nowo zaktualizowanych danych. Przyczyną może być aktualizacja danych poza jej zakresem. Odświeżenie danych po pobraniu rozwiązało mój problem.
źródło
_context.Entry(entity).Reload();
?.Reload()
nie jest dostępny w EF6. @CsabaTothOdświeżanie kontekstu bazy danych za pomocą funkcji Reload nie jest zalecane ze względu na utratę wydajności. Jest to wystarczająco dobre i najlepsze rozwiązanie, aby zainicjować nowe wystąpienie kontekstu dbcontext przed każdą wykonywaną operacją. Zapewnia również odświeżony, aktualny kontekst dla każdej operacji.
źródło
Z powodu niczego nie bolała mnie głowa! Odpowiedź była bardzo prosta - właśnie wróciłem do podstaw ...
dodaj tę linię poniżej po zaktualizowaniu / usunięciu - ponownie ładujesz swoją jednostkę - bez wymyślnych metod systemowych.
źródło