2009-04-09 9 views
4

Vous avez essayé d'automatiser certains objets.
Les objets source ont des propriétés avec _ avant le nom, les objets de destination - n'ont pas. Est-il possible d'implémenter UNE création de carte, cet automapper mappera toutes les propriétés aux propriétés
pour tous les types de source.Problème d'AutoMapper

class MyMapper<TFrom, TTo>{ 
    TTo PerformMap(TFrom fromObject){ 
     Mapper.CreateMap<From, To>(); // ??? 
     TTo result = Mapper.Map<From, To>(fromObject); 
     //result.Id.ShouldBe(value from TFrom._Id); 
     return result; 
    } 
} 

class From 
{ 
    public int _Id { get; set; } 
    public string _Name { get; set; } 
} 

class To 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

Répondre

8

Quelque chose que j'ajouté récemment à AutoMapper pourrait vous aider - les conventions de nommage personnalisé. Si vous vérifiez le coffre (R107), recherchez INamingConvention. En ce moment, j'ai deux conventions de nommage (de PascalCase et lower_case_underscore), mais il est vraiment juste une question de déterminer le droit RegEx pour vous y aller:

INamingConvention.cs

En ce moment, les conventions de nommage sont globales et profile- portée. Comme cette fonctionnalité est nouvelle, il n'y a pas de documentation autre que les tests.

+0

Je n'utilise pas AM pour le moment, mais je suis ravi de connaître cette fonctionnalité. :) –

+1

le lien dans cette réponse donne un 404, pouvez-vous s'il vous plaît mettre à jour? Merci pour le travail impressionnant Jimmy! – shanabus

+1

Le lien est mort. – gdoron

0

Pour cela, vous pouvez ajouter un mappage personnalisé pour résoudre ce cas particulier:

Mapper.CreateMap<From, To>() 
    .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src._Id)) 
    .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src._Name)); 
+0

That's l'effet que j'ai besoin, mais ... Je voulais que ce soit plus générique. Comme disant - automapper, mappez ces 2 objets, et ignorez le soulignement du nom de prop, si c'est le premier symbole dans le nom. Sinon, je dois faire attention à toutes les paires d'objets. –

1

Voilà comment je le fais

Mapper.Initialize(cfg => 
     { 
      cfg.RecognizeDestinationPrefixes(new []{"_"}); 
      cfg.RecognizePrefixes(new[] { "_" }); 

      cfg.CreateMap<To, From>().ReverseMap(); 
     });