Вам нужна комбинация ForMember
, MapFrom
и ForAllOtherMembers
:
Mapper.Initialize(cfg =>
{
cfg.CreateMap<A, B>()
.ForMember(dest => dest.Categories, opt => opt.MapFrom(src => src.Ids));
cfg.CreateMap<int, Category>()
.ForMember(dest => dest.CategoryId, opt => opt.MapFrom(src => src))
.ForAllOtherMembers(opt => opt.Ignore());
});
MapFrom
, что позволит вам переопределить сопоставление по умолчанию по имени, которое обычно делает AM.Как вы можете видеть в строке 4, мы можем сказать, что Ids
в исходном коде соответствует Categories
в классе назначения.
Но теперь вам нужно переопределить способ отображения int
, так какэто тип вещи в Ids
.С MapFrom
вам не нужно (обязательно) предоставлять свойство для источника - весь источник может быть отображаемым объектом.Таким образом, в строке 7 мы сопоставляем int
s, полученные из сопоставления в строке 4, и говорим, что они должны отображаться в свойство класса назначения * CategoryId
.Наконец, мы просто говорим AM, что нам не нужно отображать какие-либо оставшиеся свойства в целевом классе, указав параметр ForAllOtherMembers
.