3 votes

Doit être résolu par un membre de niveau supérieur

J'ai essayé la carte suivante :

CreateMap<ThemeNewModel, CreateThemeOrder.ThemeModel>()
    .ForMember(d => d.Subject.Id, o => o.MapFrom(s => s.Subject));

Les deux sites Subject.Id y Subject sont de type int . Cependant, j'obtiens l'erreur suivante :

L'expression 'd => Convert(d.Subject.Id)' doit résoudre le membre de niveau supérieur et non les propriétés d'un objet enfant. Utilisez plutôt un résolveur personnalisé sur le type enfant ou l'option AfterMap.Nom du paramètre : lambdaExpression

J'utilise AutoMapper 2.0. Ne puis-je pas résoudre ce problème sans AfterMap ?

3voto

Sunny Milenov Points 10978

Quel est le type de ThemeNewModel.Subject ? En supposant que son ThemeSubject vous pouvez avoir du succès avec quelque chose comme :

CreateMap<ThemeSubject, CreateThemeOrder.ThemeModel>()
   .ForMember(d=>d.Id, o => o.MapFrom(s->s.Subject));
CreateMap<ThemeNewModel, CreateThemeOrder.ThemeModel>()
   .ForMember(d=>d.Subject, o => o.MapFrom(s => s);

Si ce qui précède ne fonctionne pas, vous devez suivre les conseils de l'exception et créer un résolveur personnalisé.

Quoi qu'il en soit, l'automapper est conçu pour aplatir des types complexes vers des types plats de type modèle/viewmodel, de sorte que votre ThemeNewModel est trop complexe, et vous devez peut-être repenser votre conception.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X