2012-04-05 24 views
5

¿Cómo puedo asignar el siguiente:AutoMapper mapeo complejo

public abstract class PersonBase 
{ 
    public Address Address { get; set; }   
} 

public class Address 
{ 
    public string AddressHome { get; set; } 
    public int PostalNumber { get; set; } 
} 

public class PersonEditVM : PersonBase 
{ 
    public int PersonId { get; set; } 
} 

public PersonEntity 
{ 
    public int PersonId { get; set; } 
    public string AddressHome { get; set; } 
    public int PostalNumber { get; set; } 
} 

me gustaría asignar a PersonEntityPersonEditVM.

EDIT: Resuelto después de una taza de café, pero sería bueno si es una solución más limpia ?.

Mapper.CreateMap<PersonEntity, PersonEditVM >()     
       .ForMember(d=>d.Address, s=>s.MapFrom(p=> new Address{ 
        AddressHome = p.AddressHome, 
        PostalNumber = p.PostalNumber 
        })); 
+2

resuelto, pero im interesado si hay una solución más limpia a este problema? –

Respuesta

5

Aquí hay una manera de hacerlo, lo que dividir su asignación Adress (que está escrita correctamente Address por cierto) en otro CreateMap llamada:

Mapper.CreateMap<PersonEntity, PersonEditVM>() 
    .ForMember(dest => dest.Adress, opt => opt.MapFrom(src => src)); 

Mapper.CreateMap<PersonEntity, Adress>() 
    .ForMember(dest => dest.AdressHome, opt => opt.MapFrom(src => src.AdressHome)) 
    .ForMember(dest => dest.PostalNumber, opt => opt.MapFrom(src => src.PostalNumber)); 
+0

gracias por su sugerencia, sigue siendo el mismo pero con dos mapas –

+1

@plurby: ¿Qué quiere decir con 'sigue siendo el mismo'? ¿Cómo sería una solución más limpia? –

+0

No quise decir que no esté limpio, solo que esperaba una solución más limpia si fuera posible, donde no necesito especificar cada propiedad. –

Cuestiones relacionadas