Ignorer le mappage d’une propriété avec Automapper

J’utilise Automapper et j’ai le scénario suivant: Class OrderModel a une propriété appelée «ProductName» qui n’est pas dans la firebase database. Donc, quand j’essaie de faire la cartographie avec:

Mapper.CreateMap(); 

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’atsortingbut supplémentaire est sur la destination, pas dans la source qui est en fait mon cas)

Comment puis-je éviter automapper pour faire la cartographie de cette propriété?

    De Jimmy Bogard: CreateMap().ForMember(x => x.Blarg, opt => opt.Ignore());

    C’est dans l’ un des commentaires sur son blog .

    Je suis peut-être un peu perfectionniste. Je n’aime pas vraiment la syntaxe ForMember (…, x => x.Ignore ()). C’est une petite chose, mais c’est important pour moi. J’ai écrit cette méthode d’extension pour la rendre un peu plus agréable:

     public static IMappingExpression Ignore( this IMappingExpression map, Expression> selector) { map.ForMember(selector, config => config.Ignore()); return map; } 

    Il peut être utilisé comme ça:

     Mapper.CreateMap() .Ignore(record => record.Field) .Ignore(record => record.AnotherField) .Ignore(record => record.Etc); 

    Vous pouvez aussi le réécrire pour qu’il fonctionne avec les params , mais je n’aime pas l’aspect d’une méthode avec des charges de lambda.

    Tu peux le faire:

     conf.CreateMap() .ForSourceMember(x => x.SourceProperty, y => y.Ignore()); 

    Il y a maintenant (AutoMapper 2.0) un atsortingbut IgnoreMap, que je vais utiliser plutôt que la syntaxe courante qui est un peu lourde à mon humble avis.

    Pour ceux qui tentent 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:

     public static IMappingExpression IgnoreAllNonExisting(this IMappingExpression expression) { var sourceType = typeof(TSource); var destinationType = typeof(TDestination); var existingMaps = Mapper.GetAllTypeMaps().First(x => x.SourceType.Equals(sourceType) && x.DestinationType.Equals(destinationType)); foreach (var property in existingMaps.GetUnmappedPropertyNames()) { expression.ForMember(property, opt => opt.Ignore()); } return expression; } 

    à utiliser comme suit:

     Mapper.CreateMap().IgnoreAllNonExisting(); 

    merci à Can Gencer pour le conseil 🙂

    source: http://cangencer.wordpress.com/2011/06/08/auto-ignore-non-existing-properties-with-automapper/

    Lors du mappage d’un modèle de vue sur un modèle de domaine, il peut être beaucoup plus simple de simplement valider la liste de membres source plutôt que la liste de membres de destination.

     Mapper.CreateMap(MemberList.Source); 

    Maintenant, ma validation de mappage n’échoue pas, nécessitant un autre Ignore() , chaque fois que j’ajoute une propriété à ma classe de domaine.

    J’ai apprécié une extension ajoutée par Steve Rukuts, j’ai donc décidé d’append une autre méthode d’extension basée sur son exemple. J’espère que ça va aider quelqu’un:

      public static IMappingExpression Map( this IMappingExpression map, Expression> src, Expression> dst) { map.ForMember(dst, opt => opt.MapFrom(src)); return map; } 

    Usage:

      Mapper.Initialize(cfg => cfg.CreateMap() .Map(src => src.FirstName + " " + src.LastName, dst => dst.UserName)); 

    Bonjour à tous S’il vous plaît Utilisez ceci, ça marche très bien … pour un mappeur automatique, utilisez plusieurs .ForMember en C #

      if (promotionCode.Any()) { Mapper.Reset(); Mapper.CreateMap().ForMember(d => d.serverTime, o => o.MapFrom(s => s.promotionCodeId == null ? "date" : Ssortingng.Format("{0:dd/MM/yyyy h:mm:ss tt}", DateTime.UtcNow.AddHours(7.0)))) .ForMember(d => d.day, p => p.MapFrom(s => s.code != "" ? LeftTime(Convert.ToInt32(s.quantity), Convert.ToSsortingng(s.expiryDate), Convert.ToSsortingng(DateTime.UtcNow.AddHours(7.0))) : "Day")) .ForMember(d => d.subCategoryname, o => o.MapFrom(s => s.subCategoryId == 0 ? "" : Convert.ToSsortingng(subCategory.Where(z => z.subCategoryId.Equals(s.subCategoryId)).FirstOrDefault().subCategoryName))) .ForMember(d => d.optionalCategoryName, o => o.MapFrom(s => s.optCategoryId == 0 ? "" : Convert.ToSsortingng(optionalCategory.Where(z => z.optCategoryId.Equals(s.optCategoryId)).FirstOrDefault().optCategoryName))) .ForMember(d => d.logoImg, o => o.MapFrom(s => s.vendorId == 0 ? "" : Convert.ToSsortingng(vendorImg.Where(z => z.vendorId.Equals(s.vendorId)).FirstOrDefault().logoImg))) .ForMember(d => d.expiryDate, o => o.MapFrom(s => s.expiryDate == null ? "" : Ssortingng.Format("{0:dd/MM/yyyy h:mm:ss tt}", s.expiryDate))); var userPromotionModel = Mapper.Map, List>(promotionCode); return userPromotionModel; } return null;