3 Stimmen

Bitte übersetzen Sie dies und behalten Sie dabei die gleichen HTML-Tags bei, falls diese vorhanden sind: Änderungen in Entity Framework rückgängig machen, einschließlich geänderter Objekt

Es gibt mehrere Möglichkeiten, Änderungen in Entity Framework rückgängig zu machen:

  • Neuerstellung des Objektkontexts
  • Abtrennen/Anhängen vom Kontext
  • Aktualisierung: context.MyEntity.Context.Refresh(RefreshMode.StoreWins, myobject);

Die Anwendung hat eine Registerkartenoberfläche, bei der eine Registerkarte ein anderes Entitätsobjekt anzeigt. Der Benutzer kann Tags zu Objekten hinzufügen (m:n-Beziehung). Ich habe alles versucht, was ich finden konnte, aber ich konnte Entity Framework nicht dazu bringen, Änderungen rückgängig zu machen, die der Benutzer an der m:n-Beziehung vornimmt. Zum Beispiel fügt der Benutzer ein Tag hinzu (m:n-Objekt wird erstellt). Wenn der Benutzer auf "Abbrechen" klickt, sollte das Objekt in die Datenbank gespeichert werden.

Das Neuerstellen des Kontexts würde potenziell zum Datenverlust in anderen Registerkarten führen. Abtrennen/Anhängen und Refresh() funktionieren nur, wenn das Objekt selbst geändert wurde und keine verwandten Objekte hinzugefügt/entfernt wurden.

Ich habe darüber nachgedacht, für jede Registerkarte unterschiedliche Kontextobjekte zu verwenden, aber das würde dazu führen, dass die Daten nicht synchron wären (zum Beispiel klickt der Benutzer auf eine Liste und eine neue Registerkarte öffnet sich. Nach der Änderung des Objekts würde die Liste nicht automatisch aktualisiert werden)

2voto

Ladislav Mrnka Punkte 355028

Es gibt keine Rückgängig-Änderungen in EF. Ihr aktuelles Problem betrifft vielmehr die Art und Weise, wie Ihre Anwendung funktionieren soll und wie EF funktionieren soll. EF soll als Arbeitspaket fungieren - Sie haben viele Änderungen vorgenommen und entweder speichern Sie sie zusammen oder werfen sie alle weg.

Ihre Anwendung erwartet offensichtlich ein anderes Modell, da Sie nur einen Teil der Änderungen rückgängig machen müssen. Das ist nicht genau das, was der Kontext von EF handhaben soll. Eine solche Logik sollte getrennt von EF behandelt werden = Ihre Benutzeroberfläche sollte mit Objekten arbeiten, die nicht mit dem Kontext verbunden sind, und Sie sollten Entitäten anhängen und Änderungen nur definieren, wenn der Benutzer entscheidet, das Ergebnis zu speichern.

Ein teilweises Rückgängig in Kontext erfordert, dass Sie Einträge im ObjectStateManager durchsuchen und die erstellten Änderungen rückgängig machen. Bei geänderten many-to-many-Beziehungen müssen Sie Zustandseinträge finden, die Beziehungen darstellen, und Zustandsänderungen rückgängig machen. Diese Einträge können sich nur in den Zuständen hinzugefügt, gelöscht oder unverändert befinden. Sie können gelöschte Einträge zurück in den Zustand unverändert verschieben, aber ich bin im Moment nicht sicher, ob Sie hinzugefügte Instanzen irgendwie abkoppeln oder entfernen können.

0 Stimmen

Ich denke, du hast recht. Der "Arbeitsbereich", den ich versuche rückgängig zu machen, ist einfach zu komplex für EF zu handhaben. Ich habe die App so geändert, dass für jede neue Registerkarte ein anderer Kontext verwendet wird. Das Einzige, woran ich jetzt arbeiten muss, ist, wie ich die übergeordnete Liste aktualisiere. Aber das ist eher eine Sache von WPF...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X