2010-12-02 30 views
3

Mon hébergement mutualisé n'autorise pas Reflection. Comment utiliser AutoMapper?AutoMapper et réflexion

Dois-je spécifier pour chaque propriété un .ForMember?

Mapper.CreateMap<Person, PersonData>() 
      .ForMember(dest => dest.Name, o => o.MapFrom(src => src.Name)) 
      .ForMember(dest => dest.Address, o => o.MapFrom(src => src.Address)); 

grâce,

Filip

Répondre

5

Automapper utilise reflection.emit, êtes-vous sûr de pouvoir utiliser Automapper?

[Modifier]

ne sais pas de tout qui utilise sans réflexion, même celui que j'avais créé XmlDataMapper sur CodePlex utilise la réflexion. Il serait difficile d'en concevoir un sans réflexion ou réflexion.émit

La manière la plus simple et la plus simple de faire ceci serait ceci, vous pouvez utiliser l'une des deux ou les deux techniques.

public class ConversionHelper 
{ 
    public static ClassB Convert(ClassA item) 
    { 
     return new ClassB() { Id = item.Id, Name = item.Name }; 
    } 

    public static List<ClassB> Convert(List<ClassA> list) 
    { 
     return list.Select(o => new ClassB() { Id = o.Id, Name = o.Name }).ToList(); 
    } 
} 


public class ClassA 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 
public class ClassB 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

De l'échantillon que vous avez donné où vous essayez de la carte de toute façon la propriété, un par un, c'est sur les mêmes lignes, mais avec le code moindre.

+0

C'est ce que je veux savoir, est-il possible d'utiliser AutoMapper sans la réflexion? Ou connaissez-vous un autre outil de cartographie qui ne l'utilise pas? – Filip

+0

Oui, j'ai créé une classe d'aide comme vous le suggérez, mais si vous avez beaucoup de DataContract que vous voulez mapper avec les classes Entity Framework, c'est beaucoup de travail lorsque vous ajoutez une colonne dans la base de données. – Filip

+0

Vous pouvez utiliser [T4 Templates] (http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx) pour générer le code pour la conversion d'assistance ci-dessus et pour les DataContracts. Son assez simple commence vraiment avec un exemple de base, c'est comme ASP.NET inline scripting. –

0

Pas du tout. AutoMapper a fait un excellent travail sur la cartographie intelligente. Si le nom de la propriété de vos objets source et destination est le même, AutoMapper mappera automatiquement ces propriétés pour vous.

+0

Je veux utiliser AutoMapper sans la réflexion, parce que la société d'hébergement ne supporte pas Reflection, c'est pourquoi je veux savoir si le.formember est la seule solution. – Filip

+0

Ah désolé, je me trompe de votre question: -/Je ne sais pas s'il existe une autre possibilité d'utiliser AutoMapper sans réflexion. – Mariusz

1

Vous ne pouvez pas utiliser Automapper ou toute autre architecture de cartographie que je connais sans réflexion. C'est logiquement évident. Comment pourriez-vous mapper deux entités inconnues les unes aux autres sans utiliser aucune de leurs propriétés réfléchies? Votre seule option dans ce cas est de créer un package personnalisé pour convertir un objet en un autre.

+1

Ceci est maintenant faux. Voir http://www.expressmapper.org/ qui n'utilise pas du tout la réflexion mais utilise des arbres d'expression. – Rushino

+1

Bien sûr, et cette réponse est également à partir de décembre 2010. – BeRecursive

+0

Je sais. Je voulais juste le signaler au cas où quelque part à la recherche d'une telle solution et n'a pas regardé la date. – Rushino