2012-04-05 14 views
5

Come posso mappare il seguente:Automapper complessa mappatura

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; } 
} 

vorrei mappare PersonEntity-PersonEditVM.

MODIFICA: Risolto dopo una tazza di caffè ma sarebbe bello se si tratta di una soluzione più pulita ?.

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

risolto, ma Sono interessato se c'è una soluzione più pulita a questo problema? –

risposta

5

Ecco un modo per farlo, che avrebbe diviso la mappatura Adress (che è scritto correttamente Address tra l'altro) in un altro CreateMap chiamata:

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

grazie per il suggerimento, è sempre lo stesso ma con due mappe –

+1

@plurby: cosa intendi per "è sempre lo stesso"? Come sarebbe una soluzione più pulita? –

+0

Non volevo dire che non è pulito, solo che speravo in una soluzione più pulita, se possibile, dove non ho bisogno di specificare ogni proprietà. –

Problemi correlati