Ich arbeitete mit RIA-Diensten, bei denen ObjectContext die RejectChanges () -Methode verwendet. Ich arbeite jedoch jetzt mit EF 4.4 in einer Desktop-Anwendung und kann diese Methode nicht finden. Meine Frage ist also: In einem Szenario, in dem ich dem Benutzer erlaube, Batch-CrUD-Operationen bei der Sammlung durchzuführen, wie würde ich alle Änderungen rückgängig machen? Ich könnte den Kontext neu erstellen und die Daten erneut abrufen, aber das klingt sehr unnötig, wenn ich die Änderungen wieder auf 1-2 Entitäten zurücksetzen muss.
Was ist also der beste Weg, um Änderungen abzulehnen? Und wie wissen wir, ob der Kontext etwas (IsBusy) macht?
EF hat keine direkte Änderung "Änderungen zurückweisen". Sie können Entitätseinträge in ChangeTracker
/ ObjectStateManager
durchlaufen und die aktuellen Werte mit den ursprünglichen Werten modifizierter Entitäten überschreiben. Sie können auch hinzugefügte Entitäten trennen und gelöschte Entitäten wieder auf "unverändert" setzen, aber das alles funktioniert meistens nur, wenn Sie (oder EF intern) den Status einer unabhängigen Assoziation (Relation) nicht geändert haben. Wenn Sie auch mit Beziehungen arbeiten, kann das Ganze sehr viel komplizierter werden, weil Sie Beziehungen ebenfalls wiederherstellen müssen - in diesem Fall ist es einfacher, Daten neu zu laden.
Um Änderungen in der DbContext-API rückgängig zu machen, können Sie Folgendes versuchen:
%Vor%In diesem Fall denke ich, dass das Hauptproblem die Art und Weise ist, wie Sie mit Entitäten arbeiten - Sie erlauben Änderungen an Live-Daten und EF macht seine Logik hinterher, um Daten konsistent zu halten, wenn Änderungen durchgeführt werden, aber später entscheiden Sie diese Änderungen nicht gespeichert werden. In diesem Fall sollten Sie einen der folgenden Schritte ausführen:
Der Kontext tut etwas, wenn du es sagst, etwas zu tun. Es wird nie selbst beschäftigt.
Tags und Links entity-framework