Automapper map into nested class

Define two mappings, both mapping from the same source to different destinations. In the User mapping, map the Location property manually using Mapper.Map<UserBM, Location>(...)

Mapper.CreateMap<UserBM, Location>();
Mapper.CreateMap<UserBM, User>()
    .ForMember(dest => dest.Location, opt => 
         opt.MapFrom(src => Mapper.Map<UserBM, Location>(src));

I'm using Automapper 9 and the answers above didn't work for me. Then for resolve my problem that is like yours I use .afterMap, like that:

public class AutoMapperUser : Profile
{
        public AutoMapperUser ()
        {
            CreateMap<UserBM, User>()
                .AfterMap((src, dest, context) => dest.Location = context.Mapper.Map<UserBM, Location>(src));
        }
    }
}

I hope to help somebody.


I have another solution. The main idea is that AutoMapper know how to flatten nested objects when you name properly properties in flattened object: adding nested object property name as a prefix. For your case Location is prefix:

public class UserBM
{
    public int UserId { get; set; }

    public int LocationId { get; set; }
    public string LocationAddress { get; set; }
    public string LocationState { get; set; }
    public string LocationCountry { get; set; }
    ...
}

So creating familiar mapping from nested to flattened and then using ReverseMap method allows AutomMapper to understand how to unflatten nested object.

CreateMap<UserBM, User>()
   .ReverseMap();

That's all!