Wann sollte ApplyOriginalValues ​​in Entity Framework 4 verwendet werden?

8

Ich habe ApplyCurrentValues ​​verwendet.

Aber verstehe nicht wirklich ApplyOriginalValues. Wie unterscheidet es sich von ApplyCurrentValues? Wann sollte ich es benutzen?

Ich habe die Dokumentation gelesen. Aber immer noch verwirrt.

    
Gautam Jain 07.04.2011, 05:55
quelle

3 Antworten

14

Jede Entität, die aus der Datenbank geladen wird, behält zwei Sätze von Werten bei - Original (die von DB geladenen) und aktuell (die, die Sie ändern). Diese zwei Sätze werden in ObjectStateEntry gehalten. Normalerweise folgt jedem Speichern das Akzeptieren von Änderungen, die aktuelle Werte annehmen und sie in ursprüngliche Werte schreiben. Wenn Sie wissen, dass Sie Änderungen an der Entität außerhalb von EF vorgenommen haben (z. B. durch Aufrufen der gespeicherten Prozedur mit gemeinsamer ADO.NET-EF), können Sie EF über diese Änderungen informieren, ohne die Entität mithilfe von ApplyOriginalValues erneut zu laden. Ich denke, dass die Verwendung dieser Methode eher selten ist. Zum Beispiel habe ich ApplyOriginalValues in diese Antwort verwendet .

    
Ladislav Mrnka 07.04.2011, 19:09
quelle
2

Der Aufruf einer dieser Methoden hängt davon ab, ob die ursprüngliche Entität oder die aktualisierte Entität angehängt wurde. Ссылка

    
drogon 14.05.2011 23:12
quelle
1

Ich habe kürzlich die ApplyOrigalValues ​​() -Methode zur Verwendung in einem Szenario für das Löschen oder logische Löschen verwendet.

Wir verwenden Entity Framework 4.1 und haben logische / weiche Löschungen implementiert, wenn der Kontext Änderungen speichert.

Der folgende Code prüft, ob die Entität gelöscht wurde, und prüft dann, ob die richtige Schnittstelle implementiert ist. Wenn dies der Fall ist, ändern wir den Entitätszustand von gelöscht in modifiziert und wenden die ursprünglichen Werte (entry.ApplyOriginalValues ​​()) an und setzen das gelöschte Flag.

%Vor%

Ursprünglich hatten wir ein Problem, bei dem die Navigationseigenschaften beim logischen Löschen auf NULL oder leer gesetzt wurden. Die ObjectContext.DeleteObject () -Methode hat alle Navigationseigenschaften zum Löschen markiert, bevor das Context.SavingChanges () - Ereignis ausgelöst wurde. Beim Ändern des Status von "Gelöscht" in "Modifiziert" wurden die Eigenschaften des Fremdschlüssels weiterhin gelöscht. Ich habe versucht, einen Haken für die RevertDelete () -Methode zu finden (ILSpy ist sehr nützlich), aber ApplyOriginalValues ​​() funktioniert.

    
Noel 19.09.2012 17:02
quelle

Tags und Links