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.
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% 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;
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.
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%Tags und Links c# asp.net asp.net-mvc-4 automapper automapper-3