Der beste Weg, um Entitäten in Ihrem Kontext zu aktualisieren, besteht darin, Ihren Kontext zu entsorgen und einen neuen zu erstellen.
Wenn Sie eine Entität wirklich aktualisieren müssen und den Code First-Ansatz mit der DbContext-Klasse verwenden, können Sie ihn verwenden
public static void ReloadEntity<TEntity>(
this DbContext context,
TEntity entity)
where TEntity : class
{
context.Entry(entity).Reload();
}
Sie können die Navigationseigenschaften der Sammlung neu laden
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();
}
Referenz:
https://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbentityentry.reload(v=vs.113).aspx#M:System.Data.Entity.Infrastructure.DbEntityEntry .Neu laden
context.ReloadNavigationProperty(parent, p => p.Children);
wenn Sie habenclass Parent { ICollection<Child> Children; }
context.Entry(order).Collection(o => o.NavigationProperty).Query().Load();
quelle
Wenn Sie bestimmte Entitäten mit DbContextApi neu laden möchten, hat RX_DID_RX Ihnen bereits die Antwort gegeben.
Wenn Sie alle geladenen Entitäten neu laden / aktualisieren möchten:
Wenn Sie Entity Framework 4.1+ verwenden (EF5 oder EF 6 wahrscheinlich), DbContext API:
Wenn Sie entityFramework 4 (ObjectContext API) verwenden:
Der beste Rat ist sowieso, versuchen Sie, einen "kurzlebigen Kontext" zu verwenden, und Sie werden diese Art von Problemen vermeiden.
Ich habe ein paar Artikel zu diesem Thema geschrieben:
https://christianarg.wordpress.com/2013/06/13/entityframework-refreshall-loaded-entities-from-database/
quelle
Verwenden Sie die Aktualisierungsmethode :
oder alternativ entsorgen Sie Ihren aktuellen Kontext und erstellen Sie einen neuen.
quelle
((IObjectContextAdapter)dbContext).ObjectContext
context.Reload () hat in MVC 4, EF 5 nicht für mich funktioniert, also habe ich dies getan.
und es funktioniert gut.
quelle
EF 6
In meinem Szenario hat Entity Framework die neu aktualisierten Daten nicht erfasst. Der Grund könnte sein, dass die Daten außerhalb ihres Geltungsbereichs aktualisiert wurden. Das Aktualisieren von Daten nach dem Abrufen hat mein Problem behoben.
quelle
_context.Entry(entity).Reload();
?.Reload()
ist in EF6 nicht verfügbar. @CsabaTothDas Aktualisieren des Datenbankkontexts mit Reload wird aufgrund von Leistungseinbußen nicht empfohlen. Es ist gut genug und die beste Vorgehensweise, vor jeder ausgeführten Operation eine neue Instanz des Datenbankkontexts zu initialisieren. Außerdem erhalten Sie für jede Operation einen aktualisierten, aktuellen Kontext.
quelle
Ich habe meinen eigenen Kopf wegen nichts verletzt! Die Antwort war sehr einfach - ich bin gerade zu den Grundlagen zurückgekehrt ...
Fügen Sie diese Zeile unten hinzu, nachdem Sie sie aktualisiert / gelöscht haben - Sie laden Ihre Entität neu - keine ausgefallenen Systemmethoden.
quelle