J'essaye de configurer AutoMapper pour convertir d'entité en DTO. Je sais que je suis censé utiliser .ForMember()
after Mapper.CreateMap<Entity, DTO>()
pour configurer des mappages personnalisés, mais cela ne semble pas être une méthode disponible.
Modifier pour clarification: je ne cherche pas de lien vers la documentation, que j'ai lu, ni une explication de la syntaxe de base J'utilise la syntaxe correcte comme décrit dans les réponses et la documentation, par exemple:
Mapper.CreateMap<EFAddress, Address>()
.ForMember(dest => dest.Code, opt => opt.MapFrom(src => src.Name));
Si j'ai un nom de type invalide dans CreateMap <>, je peux voir "ForMember" comme une méthode valide, la souris sur affiche la signature de la méthode comme je m'y attendrais normalement. Mais dès que je lui donne deux types valides, ForMember dit qu'il ne peut pas résoudre le symbole, comme si la méthode n'était pas disponible.
Y a-t-il une sorte de contrainte sur les classes génériques que je ne rencontre pas?
Merci
la source
Mapper.CreateMap<Source, Dest>()
méthodes statiques référencées dans toutes les réponses ci-dessous sont désormais (2016) marquées obsolètes .Réponses:
Essayez la syntaxe suivante:
Mapper .CreateMap<Entity, EntityDto>() .ForMember( dest => dest.SomeDestinationProperty, opt => opt.MapFrom(src => src.SomeSourceProperty) );
ou si les propriétés source et destination ont simplement les mêmes noms:
Mapper.CreateMap<Entity, EntityDto>();
Veuillez consulter les sections pertinentes de la documentation pour plus de détails et d'autres scénarios de cartographie.
la source
En fin de compte, je pense que cela s'est avéré être une sorte d'incompatibilité avec ReSharper.
ReSharper semble avoir provoqué un affichage incorrect du code Automapper, mais fonctionne très bien (même s'il s'affiche en rouge avec des messages d'erreur). La désinstallation de ReSharper a complètement résolu ce problème.
la source
un exemple d'implémentation serait le suivant:
Mapper.CreateMap<Game, GameViewModel>() .ForMember(m => m.GameType, opt => opt.MapFrom(src => src.Type))
Nous devons mapper cette propriété car les noms des propriétés de Game et GameViewModel sont différents - s'ils sont identiques et du même type, il n'aura pas besoin d'un ForMember
une autre utilisation du ForMember est d'ignorer les mappages
Mapper.CreateMap<Game, GameViewModel>() .ForMember(dest => dest.Prize, opt => opt.Ignore());
la source
Cette utilisation ainsi que:
CreateMap<Azmoon, AzmoonViewModel>() .ForMember(d => d.CreatorUserName, m => m.MapFrom(s => s.CreatedBy.UserName)) .ForMember(d => d.LastModifierUserName, m => m.MapFrom(s => s.ModifiedBy.UserName)).IgnoreAllNonExisting();
la source
Fais-tu comme ça
Mapper.CreateMap<SourceType,DestinationType>().ForMember(What ever mapping in here)
Cette page contient de bons exemples
la source