web-dev-qa-db-fra.com

Comment mapper des propriétés d'objet enfant imbriquées dans Automapper

J'ai la carte actuelle:

CreateMap<Article, ArticleModel>()
    .ForMember(dest => dest.BaseContentItem, opts => opts.MapFrom(src => src.BaseContentItem))
    .ForMember(dest => dest.BaseContentItem.TopicTag, opts => opts.MapFrom(src => src.BaseContentItem.TopicTag))
    .ForMember(dest => dest.MainImage, opts => opts.MapFrom(src => src.MainImage))
    .ReverseMap();

L'erreur que j'obtiens est:

System.ArgumentException: 'Expression' dest => dest.BaseContentItem.TopicTag 'doit être résolu en membre de niveau supérieur et non en fonction des propriétés d'un objet enfant. Utilisez plutôt un résolveur personnalisé sur le type enfant ou l'option AfterMap. '

Comment puis-je cartographier cela?

12
amels

Cela devrait fonctionner. Utilisez ForPath au lieu de ForMember

CreateMap<Article, ArticleModel>()
    .ForMember(dest => dest.BaseContentItem, opts => opts.MapFrom(src => src.BaseContentItem))
    .ForPath(dest => dest.BaseContentItem.TopicTag, opts => opts.MapFrom(src => src.BaseContentItem.TopicTag))
    .ForMember(dest => dest.MainImage, opts => opts.MapFrom(src => src.MainImage))
    .ReverseMap();
29
macostobu

Si quelqu'un a un problème, je l'ai eu étrange.

J'ai créé des cartes pour tous les enfants correctement dans des profils de cartographie distincts. Le problème était que l'un de ces modèles enfants avait un type de TopicTag lui-même, il a donc fait déborder la pile. J'ai supprimé ce champ inutile et il mappe correctement maintenant.

0
amels