2013-03-21 8 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に解決される必要があります:私が手が例外どの子オブジェクトのプロパティもありません。子タイプまたはAfterMapオプションの代わりに のカスタムリゾルバを使用してください。パラメータ名: lambdaExpression

おかげ

答えて

30

これは、両方の新しいへのマッピングのために働くの例を参照して、ValueResolverクラスを作成することができ、より複雑になっています場合には既存のオブジェクトに追加することができます。

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番目のマッピング(2行目)。 – Steve

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

関連する問題