2013-03-21 19 views
22

Próbuję map obiektów z członkami wielopoziomowych: są zajęcia:AutoMapper - odwzorowanie poziom Głębokie

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

ten sposób staram Automapa go:

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

to wyjątek, który otrzymuję:

Wyrażenie "dest => Konwertuj (dest.Son.Id)" musi zostać przekształcone w najwyższy poziom na członka d nie ma żadnych właściwości obiektu podrzędnego. Zamiast tego użyj niestandardowego przelicznika na typu dziecka lub opcji AfterMap. Nazwa parametru: lambdaExpression

Dzięki

Odpowiedz

30

to będzie działać zarówno dla mapowania do nowego lub do istniejącego obiektu.

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

Ważną częścią tej odpowiedzi jest odwzorowaniem właściwości syna do modelu, to co wymusza używanie drugie mapowanie (linia 2). – Steve

0

duplikat od: 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))); 

Dzięki: @justin-niessner

Powiązane problemy