2012-04-05 55 views
5

Làm thế nào tôi có thể lập bản đồ sau:Automapper lập bản đồ phức tạp

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

Tôi muốn để lập bản đồ PersonEntity-PersonEditVM.

CHỈNH SỬA: Được giải quyết sau khi uống một tách cà phê nhưng sẽ rất tuyệt nếu đó là giải pháp sạch hơn ?.

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

giải quyết, nhưng im quan tâm đến nếu có một giải pháp sạch hơn cho vấn đề này? –

Trả lời

5

Dưới đây là một cách để làm điều đó, mà sẽ chia mapping Adress (được viết đúng chính tả Address bằng cách này) của bạn vào một CreateMap gọi:

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

Cảm ơn bạn đã đề xuất, nó vẫn giống nhau nhưng với hai bản đồ –

+1

@plurby: Ý của bạn là 'nó vẫn như cũ'? Một giải pháp sạch sẽ trông như thế nào? –

+0

Tôi không có nghĩa là nó không sạch sẽ, chỉ là tôi đã hy vọng cho một giải pháp sạch hơn nếu có thể, nơi tôi không cần phải xác định mọi tài sản. –

Các vấn đề liên quan