2012-06-29 10 views
15

Tengo dos clases (modelo de vista MVC) que hereda de una clase base abstracta.Automapper con clase base y diferentes opciones de configuración para las implementaciones

abstract class BaseModel { } 

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

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

y quiere configurar AutoMapper con clase base, algo así como:

Mapper.CreateMap<BaseModel, DataDestination>(); 

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

Aquí me sale error, ya que no tiene AutoMapper configuración del coche o camioneta. Intentado configurar AutoMapper con algo como esto:

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

En MapFrom, sólo veo las propiedades de la clase base! ¿Cómo configurar Automapper para usar BaseClass y expresión ForMember específica para automóvil y autocaravana? Por ejemplo, si se trata de un automóvil, mapea esta propiedad y, si es un campista, asigna esta propiedad desde otro lugar.

Respuesta

25

Aquí está el tema que describe Mapping Inheritance.

Lo siguiente debe trabajar para usted:

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

No trabajado para una situación similar se explica en [No se puede asignar a partir de modelo de vista ApplicationUser en AutoMapper 5] (http://stackoverflow.com/questions/39541588/cannot -map-from-viewmodel-to-applicationuser-in-automapper-5? noredirect = 1 # comment66397101_39541588). ¿Alguna idea? –

Cuestiones relacionadas