AutoMapper.Mapper.CreateMap<TSource,TDestination>()' ist obsolet
Habe ich Klassen Wie
class A
{
public int id {get; set;}
}
class B
{
public C c {get; set;}
}
class C
{
public int id {get; set;}
public string Name {get; set;}
}
Meine Anforderung ist die map-id der Klasse A id, Klasse C.
Nun, was ich Tat, bis jetzt war:
Mapper.CreateMap().ForMember(des => des.C.Id, src => src.MapFrom(x => x.id));
und es war in Ordnung arbeiten.
Nun scheint, wie das Auto-mapper geändert hat deren Umsetzung. und ich erhalte die Warnung wie folgt:
AutoMapper.Mapper.CreateMap()' ist obsolet: 'die dynamische Erstellung von Karten entfernt werden, in der version 5.0. Verwenden Sie eine MapperConfiguration Instanz und speichern statisch als nötig, oder Mapper.Initialisieren. Verwenden CreateMapper zum erstellen einer mapper-Instanz.
Ich brauche die Karte einige Eigenschaften von Klassen, die unterschiedliche Namen und Struktur. Jede Hilfe zu diesem.
- Haben Sie einen Blick auf dieser posten.
- Kommentar sollte zeigen Sie in die richtige Richtung, jedoch, wenn Sie kämpfen immer noch, Sie könnten installieren Sie eine frühere version mit NuGet oder mithilfe der Eingabeaufforderung den Befehl: Install-Package AutoMapper -Version 4.1.0
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuvor
Das problem ist hier, mapping-Definitionen sind statisch, einmal definiert und später wiederverwendet werden, während der gesamten Lebensdauer der Anwendung. Vor 3.3, würden Sie brauchen, um neu zu definieren das mapping auf jede Anfrage, mit der hart-codierten Wert. Und da die mapping-Konfiguration ist in einem separaten Ort als unsere mapping-Ausführung, benötigen wir eine Möglichkeit zur Einführung einer runtime-parameter in unserer Konfiguration haben, dann stellen Sie es während der Ausführung.
Dies geschieht in zwei Teile: die mapping-definition, wo wir Sie erstellen Sie eine runtime-parameter, dann wird bei der Ausführung Zeit, wenn wir Sie beliefern. Erstellen Sie die mapping-definition mit einer runtime-parameter, die wir "fake" ein Verschluss, der mit einem benannten lokalen variable:
Weitere Informationen dies sehen
Für eine oder mehrere Klassen
In der mapping-Klasse
Anderen Weg, das scheint ein wenig sauberer zu machen, ist eine MappingProfile Klasse erbt von der Klasse der Profile der AutoMapper
Dann initialisieren Sie das mapping mit
Mapper.Initialize(c => c.AddProfile<MappingProfile>());
in Ihrem startup-codeErmöglichen Ihnen die Nutzung der mapping-überall durch den Aufruf
Schließlich fand ich die Auflösung. Ich war dabei:
Mapper.Initialize{ Mapping field from source to destination }
in der App_start und fügen Sie diese Datei in das Globale.asax--> Application_Start() --> GlobalConfiguration.
Muss ich fügen Sie eine weitere Zeile in meinem Mapper.Initialisieren Sie die
cfg.CreateMissingTypeMaps = true;
Nun dieser code funktioniert für die explizite Zuordnung, wo zwei Klassen haben nicht die gleiche Struktur und den Namen der Eigenschaften.
Abgesehen von diesem, wenn wir brauchen, um anzeigen von Eigenschaften von zwei Klassen mit der gleichen Struktur der code
Mapper.map(source, destination)
auch arbeiten, die nicht arbeiten früher.Lassen Sie mich wissen, wenn jemand Schwierigkeiten mit der Lösung. Vielen Dank an alle für die obigen Antworten.