2011-10-28 14 views
12

Tengo 1 clase que necesito mapear en múltiples clases, por ejemplo.Mapa de Automapper en clase anidada

Ésta es la fuente que estoy mapeo de (modelo de vista):

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

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

    public int CountryId { get; set; } 
    public string Country { get; set; } 
} 

Ésta es la forma en la clase de destino es (modelo de dominio):

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

    public virtual Location Location { get; set; } 
    public virtual int? LocationId { get; set; } 
} 

public class Location 
{ 
    public int LocationId { get; set; } 

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

    public virtual int CountryId { get; set; } 
    public virtual Country Country { get; set; } 

} 

Así es como mi AutoMapper crear el mapa actualmente se ve:

Mapper.CreateMap<UserBM, User>(); 

Respuesta

22

Defina dos asignaciones, ambas mapeando desde la misma fuente a diferentes destinos. En el User asignación, asignar la propiedad Location manualmente utilizando Mapper.Map<UserBM, Location>(...)

Mapper.CreateMap<UserBM, Location>(); 
Mapper.CreateMap<UserBM, User>() 
    .ForMember(dest => dest.Location, opt => 
     opt.MapFrom(src => Mapper.Map<UserBM, Location>(src)); 
+0

¿cómo se puede hacer lo contrario? – xrklvs

+4

Hay un hilo similar en [SO] (http://stackoverflow.com/questions/5984640/automapper-class-and-nested-class-map-to-one-class), donde me gusta más el último bit de mapeo : en lugar de 'opt.MapFrom (src => Mapper.Map (src)', utiliza una opción 'opt => opt.MapFrom (src => src)' más simple) – superjos

Cuestiones relacionadas