Задать вопрос
@mxelgin

Как в Automapper можно отследить на каком уровне вложенности маппится dto?

Есть некие созависимые сущности

from export
inner join nomenklatura
inner join seller

from export
inner join seller


На выходе получаю json любого уровня вложенности в разрезе любой сущности

если хочу получить json до уровня seller отправляю
/export?expand=nomenklatura.seller
/export?expand=seller
/nomenklatura?expand=seller

Для маппинга сущностей использую Automapper 8
Проблема в том что в автомапере, dto не знает на каком уровне вложенности она находится поэтому я не могу правильно собрать json

CreateMap<ExportRetail, ExportRetailDto>()
 .ForMember(dest => dest.Export, opt => opt.MapFrom((src, dest, _, ctx) =>
  src.ExportId == null ? null : ExpandHelper.HasExpand(ctx, "nomenklatura", ExpandMatchMode.Contains) 
   ? ctx.Mapper.Map<NomenklaturaDto>(src.Export)
   : new NomenklaturaDto { InternalId = src.ExportId.Value }));

CreateMap<ExportRetail, ExportRetailDto>()
 .ForMember(dest => dest.Seller, opt => opt.MapFrom((src, dest, _, ctx) =>
  ExpandHelper.HasExpand(ctx, "seller", ExpandMatchMode.Contains) 
   ? ctx.Mapper.Map<SellerDto>(src.Seller)
   : new SellerDto { SellerId = src.SellerId }
 ))

CreateMap<Nomenklatura, NomenklaturaDto>()
 .ForMember(dest => dest.Seller, opt => opt.MapFrom((src, dest, _, ctx) =>
  ExpandHelper.HasExpand(ctx, "seller", ExpandMatchMode.Contains) 
   ? ctx.Mapper.Map<SellerDto>(src.Seller)
   : new SellerDto { SellerId = src.SellerId }
 ))


на примере маппера видно что контекст не знает чей SellerDto.
Или пришел через NomenklaturaDto
/nomenklatura?expand=seller
Или пришел через ExportRetailDto->NomenklaturaDto
/export?expand=nomenklatura.seller
Или пришел через ExportRetailDto
/export?expand=seller

как в автомаппере можно отследить какой уровень вложенности у dto чтобы можно было управлять через expand маппингом?
  • Вопрос задан
  • 12 просмотров
Подписаться Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы