2012-04-05 165 views
5

我該如何映射如下:Automapper複雜的映射

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

我要地圖PersonEntityPersonEditVM

編輯:一杯咖啡後解決,但如果它是一個清潔的解決方案這將是很好?

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

解決了,但是我有興趣,如果有這個問題更清潔的解決方案?對於建議 – 2012-04-05 09:20:25

回答

5

這裏有一個辦法做到這一點,這將分裂您Adress(這是正確的方式拼寫Address)映射到另一個CreateMap電話:

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

感謝,它仍然是相同的,但有兩個地圖 – 2012-04-05 12:39:33

+1

@plurby:你是什麼意思「它仍然是相同的」?更清潔的解決方案會是什麼樣子? – 2012-04-05 12:46:19

+0

我並不意味着它不乾淨,只是我希望的如果可能的話更清潔的解決方案,我並不需要指定每個屬性。 – 2012-04-05 13:14:45