2012-04-05 110 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