2011-11-09 17 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.StreetAddress.Stateにそれらを一致します。

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

    public string AddressStreet { get; set; } // User.Address.Street 
    public string AddressState { get; set; } // User.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)); 

Projectionや詳細については、FlatteningためAutoMapperのマニュアルを参照してください。

+1

これは深いですか?住所を持つ子どもを持つユーザーがいる場合はどうなりますか? –

+0

@Lolcoder、わかりません。私はドキュメントに記載されている制限はありません。私はAutoMapperに精通している人のために新しい質問をする価値があるかもしれません。 –

+0

同じ規則でこれを逆にする簡単な方法はありますか? –

関連する問題