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!