AutoMapper.Mapper.CreateMapTSource, TDestination () 'ist veraltet

9

Ich muss Klassen wie

%Vor%

Meine Anforderung besteht darin, die ID der Klasse A der ID der Klasse C zuzuordnen. Was ich bis jetzt gemacht habe, war:      Mapper.CreateMap (). ForMember (des = & gt; des.C.Id, src = & gt; src.MapFrom (x = & gt; x.id));

und es hat gut funktioniert.

Jetzt scheint Auto Mapper ihre Implementierung geändert zu haben. und ich bekomme eine Warnung wie folgt:

AutoMapper.Mapper.CreateMap () 'ist veraltet:' Das dynamische Erstellen von Karten wird in Version 5.0 entfernt. Verwenden Sie eine MapperConfiguration-Instanz und speichern Sie sie bei Bedarf statisch oder Mapper.Initialize. Verwenden Sie CreateMapper, um eine Mapper-Instanz zu erstellen.

Ich muss einige Eigenschaften von Klassen zuordnen, die einen anderen Namen und eine andere Struktur haben. Jede Hilfe zu diesem Thema.

    
Sharad 04.04.2016, 08:56
quelle

3 Antworten

17

Vorher

%Vor%

Das Problem hierbei ist, dass Mapping-Definitionen statisch sind, einmal definiert und während der gesamten Lebensdauer der Anwendung wiederverwendet werden. Vor 3.3 müssten Sie das Mapping bei jeder Anforderung mit dem fest codierten Wert neu definieren. Und da die Mapping-Konfiguration an einem anderen Ort als unserer Mapping-Ausführung erstellt wird, müssen wir einen Laufzeitparameter in unserer Konfiguration einführen und ihn dann während der Ausführung bereitstellen.

Dies wird in zwei Teilen erreicht: Die Mapping-Definition, in der wir einen Laufzeitparameter erstellen, und dann zur Ausführungszeit, wenn wir sie bereitstellen. Um die Zuordnungsdefinition mit einem Laufzeitparameter zu erstellen, "fälschen" wir einen Abschluss, der eine benannte lokale Variable enthält:

%Vor%

Für weitere Informationen siehe

Für eine oder mehrere Klassen

%Vor%

In der Mapping-Klasse

%Vor%     
Anik Saha 04.04.2016, 09:15
quelle
0

Endlich fand ich die Auflösung. Ich tat: Mapper.Initialize{ Mapping field from source to destination } in der App_start und Hinzufügen dieser Datei zum global.asax - & gt; Application_Start () - & gt; Globale Konfiguration.

Ich muss in meinem Mapper.Initialize eine weitere Zeile hinzufügen, die cfg.CreateMissingTypeMaps = true;

ist

Nun wird dieser Code für das explizite Mapping funktionieren, wo zwei Klassen nicht die gleiche Struktur und Namen von Eigenschaften haben.

Abgesehen davon, wenn wir Eigenschaften von zwei Klassen mit der gleichen Struktur zuordnen müssen, funktioniert auch der Code Mapper.map(source, destination) , der früher nicht funktionierte.

Lassen Sie mich wissen, wenn jemand Schwierigkeiten mit der Lösung hat. Vielen Dank für die obige Antwort.

    
Sharad 05.04.2016 04:53
quelle
0

Eine etwas sauberere Methode ist die Erstellung einer MappingProfile-Klasse, die von der AutoMapper-Profilklasse

abgeleitet ist %Vor%

Dann initialisieren Sie das Mapping mit Mapper.Initialize(c => c.AddProfile<MappingProfile>()); in Ihrem Startup-Code

Damit können Sie das Mapping überall verwenden, indem Sie

aufrufen %Vor%     
Leonard Lay 24.12.2017 08:57
quelle