2011-11-09 1 views
8

이 내 소스 :Automapper지도 독신합니다 (평평)

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

    public Address Address { get; set; } 
} 

public class Address 
{ 
    public string Address { get; set; } 
    public string State {get; set; } 
} 

이 내 목적지 : 나는 매핑을 어떻게

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

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

? 평평하게 만드는 것이 자동이라고 말하는 경우 정상적인지도를 만들 수 없습니다.

답변

15

당신이 AddressStreetAddressState에 대상 클래스의 속성 이름을 변경하는 경우, AutoMapper는 규칙에 따라, Address.Street 소스에 Address.State에 일치합니다.

Mapper.CreateMap<User, UserVM>() 
    .ForMember(dest => dest.Street, opt => opt.MapFrom(src => src.Address.Street)) 
    .ForMember(dest => dest.State, opt => opt.MapFrom(src => src.Address.State)); 

자세한 내용은 ProjectionFlattening에 대한 AutoMapper 문서를 참조하십시오 :

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

    public string AddressStreet { get; set; } // User.Address.Street 
    public string AddressState { get; set; } // User.Address.State 
} 

는 다른 방법으로는 사용자 지정 멤버 매핑을 그대로 목적지의 속성 이름을 그대로두고 사용합니다.

+1

이것은 얼마나 깊은 일입니까? 주소가있는 자녀를 둔 사용자가있는 경우 어떻게합니까? –

+0

@Lolcoder, 확실하지 않습니다. 나는 문서에서 언급 된 어떤 한계도 보지 못했다. 나는 AutoMapper에 익숙한 누군가를위한 새로운 질문을 할 가치가있다. –

+0

같은 규칙으로이 작업을 수행하는 쉬운 방법이 있습니까? –