2011-11-09 12 views
8

Ésta es mi fuente:mapa AutoMapper de la clase anidada para individuales (aplanar)

public class User 
{ 
    public int UserId { get; set; } 

    public Address Address { get; set; } 
} 

public class Address 
{ 
    public string Address { get; set; } 
    public string State {get; set; } 
} 

Este es mi destino:

public class UserVM 
{ 
    public int UserId { get; set; } 

    public string Address { get; set; } 
    public string State { get; set; } 
} 

¿Cómo se hace la asignación? El mapa de creación normal no funciona cuando dicen que el aplanamiento es automático.

Respuesta

15

Si cambia sus nombres de las propiedades de la clase destino a AddressStreet y AddressState, AutoMapper será, por convención, relacionarlas con Address.Street y Address.State de la fuente.

public class UserVM 
{ 
    public int UserId { get; set; } 

    public string AddressStreet { get; set; } // User.Address.Street 
    public string AddressState { get; set; } // User.Address.State 
} 

Alternativamente, se puede dejar el nombre de propiedad de destino tal como está y usar asignaciones miembro personalizado:

Mapper.CreateMap<User, UserVM>() 
    .ForMember(dest => dest.Street, opt => opt.MapFrom(src => src.Address.Street)) 
    .ForMember(dest => dest.State, opt => opt.MapFrom(src => src.Address.State)); 

Consulte la documentación de AutoMapper Projection y Flattening para más información.

+1

¿Qué tan profundo es esto? ¿Qué pasa si tengo ese Usuario con niños que también tienen direcciones? –

+0

@Lolcoder, no estoy seguro; No veo ningún límite mencionado en la documentación. Puede valer una nueva pregunta para alguien más familiarizado con AutoMapper que yo. –

+0

¿Hay una manera fácil de hacer lo contrario con la misma convención? –

Cuestiones relacionadas