2013-03-21 151 views
22

我試圖映射與多層次的成員對象: 這些都是類:AutoMapper - 深層次映射

public class Father 
    { 
     public int Id { get; set; } 
     public Son Son { get; set; } 
    } 

    public class FatherModel 
    { 
     public int Id { get; set; } 
     public int SonId { get; set; } 
    } 

    public class Son 
    { 
     public int Id { get; set; } 
    } 

這是我嘗試自動映射它:

AutoMapper.Mapper.CreateMap<FatherModel , Father>() 
         .ForMember(dest => dest.Son.Id, opt => opt.MapFrom(src => src.SonId)); 

這是我得到的例外:

表達式'dest =>轉換(dest.Son.Id)'必須解析爲頂級 成員an d沒有任何子對象的屬性。改爲使用 子類型或AfterMap選項上的自定義解析器。參數名: lambdaExpression

感謝

回答

30

這將工作都映射到一個新的或現有的對象。

Mapper.CreateMap<FatherModel, Father>() 
    .ForMember(x => x.Son, opt => opt.MapFrom(model => model)); 
Mapper.CreateMap<FatherModel, Son>() 
    .ForMember(x => x.Id, opt => opt.MapFrom(model => model.SonId)); 
+3

這個答案的重要組成部分,是兒子的財產,以該模型的映射,這就是強制使用的第二個映射(第2行)。 – Steve 2015-01-26 10:54:48

0

重複來自:https://stackoverflow.com/a/8944694/1586498

Mapper.CreateMap<DomainClass, Child>(); 
Mapper.CreateMap<DomainClass, Parent>() 
    .ForMember(d => d.Id, opt => opt.MapFrom(s => s.Id)) 
    .ForMember(d => d.A, opt => opt.MapFrom(s => s.A)) 
    .ForMember(d => d.Child, 
      opt => opt.MapFrom(s => Mapper.Map<DomainClass, Child>(s))); 

感謝:@justin-niessner