Zuordnen eines DTO zu einer Entität mit Automapper

7

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.

%Vor%

Nun, was tue ich, um das zu lösen? Kann ich:

  1. Irgendwie sagen Sie AutoMapper zu .Ignore() die Entity Key Eigenschaften?
  2. Lassen Sie AutoMapper die Entity Key-Eigenschaften kopieren?
  3. .Attach() my mapped Entity und setze den Status auf modifiziert?

Jede Hilfe immer geschätzt.

    
Paul Aldred-Bann 31.10.2012, 11:04
quelle

3 Antworten

7
  

.Attach () meine zugeordnete Entity und setzen den Status zu modifizieren?

%Vor%

Wo wird Ihr Kontext instanziiert? Sie sollten das in Ihrer EditEntity-Aktion imo tun.

%Vor%     
Pluc 31.10.2012, 11:26
quelle
12

Übergeben Sie Entity als zweiten Parameter an Ihr Mapping.

%Vor%

Andernfalls wird Ihre Entitätsinstanz mit einer neuen Instanz überschrieben und Sie verlieren die in der ersten Zeile erstellte Entität.

    
dark_ruby 31.10.2012 11:12
quelle
1

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.

    
SventoryMang 27.09.2016 20:41
quelle

Tags und Links