2010-12-16 18 views
5

Considere el siguiente caso básico:¿Cómo configurar AutoMapper para polimorfismo con mapeo explícito de miembros?

Mapper.CreateMap<FromBase, ToBase>() 
     .Include<FromD1, ToD1>() 
     .Include<FromD2, ToD2>(); 

Mapper.CreateMap<FromD1, ToD1>() 
     .ForMember(m => m.P0, a => a.MapFrom(x => x.Prop0)) 
     .ForMember(m => m.P1, a => a.MapFrom(x => x.Prop1)); 

Mapper.CreateMap<FromD2, ToD2>() 
     .ForMember(m => m.P0, a => a.MapFrom(x => x.Prop0)) 
     .ForMember(m => m.P2, a => a.MapFrom(x => x.Prop2)); 

Mapper.AssertConfigurationIsValid(); 

FromBase[] froms = { 
     new FromD1() { Prop0 = 10, Prop1 = 11 }, 
     new FromD2() { Prop0 = 20, Prop2 = 22 } 
}; 

var tos = Mapper.Map<FromBase[], ToBase[]>(froms); 

Con:

public class FromBase { 
    public int Prop0 { get; set; } 
} 
public class FromD1 : FromBase { 
    public int Prop1 { get; set; } 
} 
public class FromD2 : FromBase { 
    public int Prop2 { get; set; } 
} 

public class ToBase { 
    public int P0 { get; set; } 
} 
public class ToD1 : ToBase { 
    public int P1 { get; set; } 
} 
public class ToD2 : ToBase { 
    public int P2 { get; set; } 
} 

Parece que la example el doc de AutoMapper.

Sin embargo, el Mapper.AssertConfigurationIsValid() afirmación de lanza:

AutoMapperConfigurationException: "Los siguientes 1 propiedades en a_base no se asignan: P0 Añadir una expresión de asignación personalizada, ignoran, o cambiar el nombre de la propiedad en frombase. "

A menos que me falta algo, las únicas diferencias con el ejemplo es que no estoy confiando en las convenciones, mapeando las propiedades manualmente con ForMember. También hay varias clases derivadas. No estoy seguro de cómo estos serían un problema, pero no se me ocurre nada más.

¿Alguna idea?

+0

leer esto en la forma correcta de hacerlo: https://github.com/AutoMapper/AutoMapper/wiki/Lists-and- matrices –

Respuesta

1

El mapeo funciona realmente bien, aunque la afirmación de validación de configuración falla ...

Cuestiones relacionadas