Ich habe ein Entity Framework POCO mit der folgenden Struktur.
%Vor%Ich habe ein Datenübertragungsobjekt für diese Entität erstellt, das von meinen Ansichten verwendet werden kann.
%Vor%Nun habe ich den folgenden Mapping-Code in meiner Global.asax-Datei.
%Vor% Alles funktioniert gut, ich gebe das DTO an meine Ansichten weiter und ich kann eine neue Instanz von Entity
aus meinem EntityDto
-Modell erstellen. Das Problem tritt auf, wenn ich versuche, mein Entity
zu bearbeiten; Mir ist bewusst, dass AutoMapper den Entity Key verliert, den EF erstellt, um Änderungen am Objekt zu verfolgen, aber nachdem er einige Quellen gelesen hat, scheint es keine endgültige Lösung zu geben. Hier ist die Aktion, mit der ich meine Entität bearbeite.
Nun, was tue ich, um das zu lösen? Kann ich:
.Ignore()
die Entity Key Eigenschaften? .Attach()
my mapped Entity
und setze den Status auf modifiziert? Jede Hilfe immer geschätzt.
Eine alternative Antwort, die Automapper für die Konvertierung von DTO zu Entität nicht benötigt, ist die Verwendung eines DbEntry:
%Vor%Sie benötigen keine Attach- / Statusüberprüfung, da Sie zuerst die alte Entität erhalten, an die eine Änderungsverfolgung angehängt ist. Außerdem können die CurrentValues.SetValues einen anderen Typ annehmen, in diesem Beispiel ist updatedEntity das DTO. Die Dokumentation zu Set Values wird folgendermaßen erläutert:
Setzt die Werte dieses Wörterbuchs durch Lesen von Werten aus dem gegebenen Objekt. Das gegebene Objekt kann von irgendeinem Typ sein. Jede Eigenschaft des Objekts mit einem Namen, die mit einem Eigenschaftsnamen im Wörterbuch übereinstimmt und gelesen werden kann, wird gelesen. Andere Eigenschaften werden ignoriert. Dies ermöglicht beispielsweise das Kopieren von Eigenschaften aus einfachen Datenübertragungsobjekten (DTOs).
Es scheint also so, als könnte es bereits auf automatische Weise funktionieren.
Tags und Links c# entity-framework automapper