Kann ich die Vererbungszuordnung in AutoMapper (v2.2) für Karten mit demselben Quellentyp aber unterschiedlichen Zieltypen verwenden?AutoMapper - Vererbungszuordnung funktioniert nicht, gleiche Quelle, mehrere Ziele
Ich habe diese Grundsituation (die realen Klassen viele weitere Eigenschaften haben):
public abstract class BaseViewModel
{
public int CommonProperty { get; set;}
}
public class ViewModelA : BaseViewModel
{
public int PropertyA { get; set; }
}
public class ViewModelB : BaseViewModel
{
public int PropertyB { get; set; }
}
ViewModelA
und ViewModelB
unterschiedliche Darstellungen derselben Entity Klasse sind:
public class Entity
{
public int Property1 { get; set; }
public int Property2 { get; set; }
public int Property3 { get; set; }
}
ich die wiederverwendet werden soll gleiche Abbildung für BaseViewModel
für jedes ViewModel, wie zum Beispiel:
Mapper.CreateMap<Entity, BaseViewModel>()
.Include<Entity, ViewModelA>()
.Include<Entity, ViewModelB>()
.ForMember(x => x.CommonProperty, y => y.MapFrom(z => z.Property1));
Mapper.CreateMap<Entity, ViewModelA>()
.ForMember(x => x.PropertyA, y => y.MapFrom(z => z.Property2));
Mapper.CreateMap<Entity, ViewModelB>()
.ForMember(x => x.PropertyB, y => y.MapFrom(z => z.Property3));
Aber leider scheint das nicht zu funktionieren. Anrufe wie diese:
var model = Mapper.Map<Entity, ViewModelA>(entity);
Ergebnis in model
haben PropertyA
abgebildet, aber nicht CommonProperty
. Ich glaube, ich befolge die Beispiele in https://github.com/AutoMapper/AutoMapper/wiki/Mapping-inheritance richtig, aber ich habe Angst, mehrere Karten erstellt mit dem gleichen Quellentyp ist AutoMapper ausstoßen.
Irgendwelche Einsichten? Ich mag die Idee, Basisklassenzuordnungen zu gruppieren, aber das scheint nicht zu funktionieren.
Für zukünftige Leser dieser Frage - es scheint, AutoMapper hat dies behoben, seit die Frage gestellt wurde. –
Ich versuche, das gleiche hier zu tun, aber ich versuche zu tun: 'var model = Mapper.Map (Einheit)' aber es gibt eine Instanz von ViewModelA, nicht eine Instanz von BaseViewModel, auch wenn ich der Map-Funktion sage, dass sie einen BaseViewModel-Typ zurückgibt. Ich benutze Automapper 3.0 so, es scheint, als ob der ursprüngliche Fehler von 2.2 behoben wurde. –
njkremer
Diese SO-Post hat mir bei meinem Problem geholfen und den gewünschten Effekt erzielt. http://stackoverflow.com/questions/27317719/automapper-how-to-not-repeat-mapping-config-from-complex-type-to-base-class – njkremer