39

複数レベルのメンバーを持つオブジェクトをマップしようとしています: これらはクラスです:

 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 => Convert(dest.Son.Id)' は、子オブジェクトのプロパティではなく、最上位メンバーに解決される必要があります。代わりに、子タイプまたは AfterMap オプションでカスタム リゾルバーを使用してください。パラメータ名: lambdaExpression

ありがとう

4

3 に答える 3

46

これは、新しいオブジェクトまたは既存のオブジェクトへのマッピングの両方で機能します。

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));
于 2013-03-21T19:11:26.520 に答える
20
    AutoMapper.Mapper.CreateMap<FatherModel, Father>()
                     .ForMember(x => x.Son, opt => opt.ResolveUsing(model => new Son() {Id = model.SonId}));

より複雑になっている場合は、ValueResolver クラスを作成できます。ここで例を参照してください- http://automapper.codeplex.com/wikipage?title=Custom%20Value%20Resolvers

于 2013-03-21T18:56:33.277 に答える