2016-07-01 8 views
0

Ich bin Mapping zwischen zwei Objekten, die Quelle enthält zwei Strings namens Animal und AnimalColor, zum Beispiel Animal = "Cat" und AnimalColor = "White". Das Ziel enthält eine Eigenschaft Animal, die eine Klasse von Typ ist Pet, die zwei Strings enthält, Type Und ColorAutomapper - Mapping Strings in Objekt mit demselben Namen

Deshalb habe ich folgendes in meiner Mapper-Konfiguration:

cfg.CreateMap<SrcPetStore, DestPetStore>() 
    .ForMember(dest => dest.Animal, opt => opt.MapFrom(src => new Pet() { Type = src.Animal, Color = src.AnimalColor })); 

Als ich das betreibe ich eine AutoMapperMappingException bekommen beschwerte sich über Missing type map configuration or unsupported mapping auf Mapping String -> Pet

es ist wie es das Ziel Animal (Pet-Objekt) von der Quelle zur Karte versucht Animal (string), ohne die individuelle ForMember Konfiguration unter Berücksichtigung

Wenn ich ein nicht verwendeten Mapping cfg.CreateMap<string, Pet>() alles funktioniert hinzufügen, aber es sollte, da das Mapping verwendet wird nie nicht notwendig sein (und macht keinen Sinn)

Dies ist AutoMapper 5,0 (btw kann jemand, erstellen Sie das Stichwort "AutoMapper-5"?)

+0

Können Sie Ihre Klassendefinitionen –

Antwort

2

MapFrom() verwendet wird, um einfach die Quelleigenschaft für die Zuordnung auswählen. Es erzählt im Grunde AutoMapper „Ich möchte Sie diese Eigenschaft nehmen Name diese Eigenschaft Namen, abzubilden, aber die Typen mit Typzuordnungen Karte, die Sie in Ihrer Konfiguration haben.

es im Wiki als Projection dokumentiert . die ResolveUsing Methode wie folgt verwenden (einfach ersetzen MapFrom)

Was als Custom value resolution ist bekannt, zu tun Sie versuchen

:

.ForMember(dest => dest.Animal, opt => opt.ResolveUsing(src => new Pet() { Type = src.Animal, Color = src.AnimalColor })); 

.gibt die Funktion zurück, die von Ihrer Funktion zurückgegeben wird, und weist sie der Zieleigenschaft zu, ohne zusätzliche Karten zu erstellen.

Sie können auch eine ValueResolver Klasse und verwenden Sie es wie folgt erstellen:

.ForMember(dest => dest.Animal, opt => opt.ResolveUsing<PetResolver>()); 
+0

Danke für den Tipp schreiben :) aber ich die gleiche Ausnahme noch mit 'ResolveUsing', bekommen die geht weg, wenn ich die unbenutzte '' Mapping – st3inn

+0

@ st3inn hinzufügen, das ist komisch, aber ich vermute, dass der Fehler nicht auf der Eigenschaft auftritt, die Sie dann denken, wie diese Member-Konfiguration sollte definitiv funktionieren. Können Sie weiteren Quellcode hinzufügen? – MarioDS