2012-12-17 7 views
10

Mit AutoMapper ich eine einfache Karte:AutoMapper: Gibt die Karte <A,B><B,A>?

Mapper.CreateMap<MyCustomerDTO, YourCustomerDTO>() 

Ich muss oft zu in die andere Richtung gehen. Muss ich das Mapping auch anders herum erstellen, oder wird Automapper es anhand des obigen Mappings ableiten?

Mapper.CreateMap<YourCustomerDTO, MyCustomerDTO>() //Needed? 

Antwort

11

Nein. Sie müssen ein Zweiwege-Mapping erstellen. Eine gute Helfer-Methode für Zwei-Wege-Mapping könnte sein:

protected virtual void ViceVersa<T1, T2>() 
     { 
      Mapper.CreateMap<T1, T2>(); 
      Mapper.CreateMap<T2, T1>(); 
     } 

es dann wie folgt verwenden:

ViceVersa<T1, T2>(); 
+15

Beachten Sie, dass dies jetzt "out of the box" mit der Option "ReverseMap" erfolgen kann. – Mightymuke

2

müssen Sie auch eine zweite Zuordnung erstellen. Ein einfacher Test versucht, die App ohne zweite Abbildung ausgeführt werden Sie einen Laufzeitfehler

+0

Ich glaube nicht, dass es einen Kompilierungsfehler gibt, wenn ich mich richtig erinnere ... es gibt einen Laufzeitfehler? Keine Zuordnung für B, A gefunden oder etwas in dieser Richtung? – Alex

+0

das ist richtig ... Ich erinnerte mich, dass es einen Fehler gibt. – Dmitry

15

Dies ist ein Duplikat Do i need to create automapper createmap both ways?

Beachten Sie die Antwort in Bezug auf .ReverseMap()here.

Beachten Sie, dass .ReverseMap() für grundlegende Zuordnung ist. Wenn Sie Optionen verwenden müssen (z. B. spezifische ForMember Zuordnungen), müssen Sie eine benutzerdefinierte umgekehrte Zuordnung erstellen.

1

ich über das gleiche Problem gekommen bin, wenn sie mit AutoMapper arbeiten und @ Behnam-Esmaili ist eine gute Antwort, aber es könnte verbessert werden.

Sie könnten eine Erweiterungsmethode für IMapperConfigurationExpression implementieren, die diese zweifache Zuordnung durchführen würde und außerdem zwei optionale Parameter (Action<IMappingExpression<T, Y>>) erwartet, die beim Konfigurieren der Zuordnungen für beide Typen verwendet würden.

Die obige Implementierung ist ein Weg, um es zu erreichen, aber es kann anders gestaltet werden.

Verwandte Themen