J'utilise Automapper et j'ai le scénario suivant: La classe OrderModel a une propriété appelée 'ProductName' qui n'est pas dans la base de données. Donc quand j'essaye de faire le mapping avec:
Mapper.CreateMap<OrderModel, Orders>();
Il génère une exception:
"Les 1 propriétés suivantes sur Project.ViewModels.OrderModel ne sont pas mappées: 'ProductName'
J'ai lu sur le Wiki for Projections d'AutoMapper le cas contraire (l'attribut supplémentaire est sur la destination, pas dans la source qui est en fait mon cas)
Comment puis-je éviter l'automappeur pour effectuer le mappage de cette propriété?
Réponses:
De Jimmy Bogard:
CreateMap<Foo, Bar>().ForMember(x => x.Blarg, opt => opt.Ignore());
C'est dans l' un des commentaires de son blog .
la source
CreateMap<Foo, Bar>().ForSourceMember(x => x.Blarg, opt => opt.Ignore());
pourrait aussi être utileCreateMap<SourceType, DestType> (MemberList.Source).ForSourceMember(x => x.MySourceProperty, opt => opt.DoNotValidate())
?Ignore()
reste la syntaxe correcte. En effet, le changement de syntaxe pour aIgnore
été effectué sur l'ISourceMemberConfigurationExpression
interface mais pas sur l'IMemberConfigurationExpression`3
interface disjointe .Je suis peut-être un peu perfectionniste; Je n'aime pas vraiment la syntaxe ForMember (..., x => x.Ignore ()). C'est une petite chose, mais ça m'importe. J'ai écrit cette méthode d'extension pour la rendre un peu plus agréable:
Il peut être utilisé comme ceci:
Vous pouvez également le réécrire pour qu'il fonctionne
params
, mais je n'aime pas l'apparence d'une méthode avec beaucoup de lambdas.la source
params
: Vous pouvez renvoyer un tableau de sélecteurs à l'intérieur d'un seul lambda, puis mapper sur chaque sélecteur avecforeach
ouSelect()
peut - être pas moins désordonné, cependant.Tu peux le faire:
la source
Pour toute personne essayant de le faire automatiquement, vous pouvez utiliser cette méthode d'extension pour ignorer les propriétés non existantes sur le type de destination:
à utiliser comme suit:
merci à Can Gencer pour l'astuce :)
source: http://cangencer.wordpress.com/2011/06/08/auto-ignore-non-existing-properties-with-automapper/
la source
'Mapper' does not contain a definition for 'GetAllTypeMaps' [DSSTools]
..Mapper.Configuration.GetAllTypeMaps()
sourceIl y a maintenant (AutoMapper 2.0) un
IgnoreMap
attribut, que je vais utiliser plutôt que la syntaxe courante qui est un peu lourde à mon humble avis .la source
IgnoreMapAttribute
.Lors du mappage d'un modèle de vue vers un modèle de domaine, il peut être beaucoup plus simple de simplement valider la liste des membres source plutôt que la liste des membres de destination
Maintenant, ma validation de mappage n'échoue pas, nécessitant une autre
Ignore()
, chaque fois que j'ajoute une propriété à ma classe de domaine.la source
Pourrait utiliser IgnoreAttribute sur la propriété qui doit être ignorée
la source
[IgnoreMap]
deIgnoreMapAttribute
Bonjour à tous S'il vous plaît Utilisez cela, cela fonctionne bien ... pour le mappeur automatique, utilisez plusieurs .ForMember en C #
la source