2011-11-09 80 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)); 

ProjectionFlattening的AutoMapper文檔的詳細信息。

+1

這有多深?如果我有擁有地址的孩子的用戶,該怎麼辦? –

+0

@Lolcoder,我不確定;我沒有看到文檔中提到的任何限制。對於比我更熟悉AutoMapper的人來說,值得一個新的問題。 –

+0

有沒有一種簡單的方法來做相反的約定? –