2012-06-29 3 views
15

Ich habe zwei Klassen (MVC-View-Modell), die von einer abstrakten Basisklasse erbt.Automapper mit Basisklasse und verschiedenen Konfigurationsoptionen für Implementierungen

abstract class BaseModel { } 

class Car : BaseModel 
{ 
    public string Speed { get; set; } 
} 

class Camper : BaseModel 
{ 
    public int Beds { get; set; } 
} 

und will AutoMapper mit der Basisklasse konfigurieren, so etwas wie:

Mapper.CreateMap<BaseModel, DataDestination>(); 

var someObj = new DataDastination(); 
Mapper.Map(instanceOfBaseModel, someObj); 

Hier ist Fehler erhalten, weil AutoMapper nicht Konfiguration von Auto oder Camper hat. Versucht, Automapper mit etwas in der Art zu konfigurieren:

Mapper.CreateMap<BaseModel, DataDestination>() 
    .ForMember(dest => dest.SomeProp, mapper => mapper.MapFrom(....)); 

In MapFrom, sehe ich nur Eigenschaften aus der Basisklasse! Wie konfiguriert man den Automapper für die Verwendung von BaseClass und den spezifischen ForMember-Ausdruck für Car und Camper? Zum Beispiel, wenn es ein Auto ist, mappieren Sie diese Eigenschaft von diesem, und wenn es ein Camper ist, ordnen Sie diese Eigenschaft von woanders an.

Antwort

25

Hier ist das Thema beschreibt Mapping Inheritance.

Folgendes sollte für Sie arbeiten:

Mapper.CreateMap<BaseModel, DataDastination>() 
    .Include<Car, DataDastination>() 
    .Include<Camper, DataDastination>();//.ForMember(general mapping) 
Mapper.CreateMap<Car, DataDastination>();//.ForMember(some specific mapping) 
Mapper.CreateMap<Camper, DataDastination>();//.ForMember(some specific mapping) 
+0

Nicht für eine ähnliche Situation gearbeitet erklärt auf [von Viewmodel ApplicationUser in AutoMapper nicht 5 abbilden] (http://stackoverflow.com/questions/39541588/cannot -map-from-viewmodel-to-applicationBenutzerautomatik-5? noredirect = 1 # comment66397101_39541588). Irgendeine Idee? –

Verwandte Themen