55 votes

Dois-je créer un automapper createmap dans les deux sens ?

C'est peut-être une question stupide ! (je suis novice en matière d'AutoMapper et je n'ai pas beaucoup de temps).

Je veux utiliser AutoMapper pour faire correspondre les entités EF4 aux classes ViewModel.

1) Si j'appelle

CreateMap<ModelClass, ViewModelClass>()

alors dois-je également appeler

CreateMap<ViewModelClass, ModelClass>()

pour effectuer l'inverse ?

2) Si deux classes ont les mêmes noms de propriétés, ai-je besoin d'une instruction CreateMap ou est-ce seulement pour les mappings "spécifiques/personnalisés" ?

139voto

Ivan Zlatev Points 4844

Pour l'info des personnes qui tombent sur cette question. Il semble qu'il existe désormais un moyen intégré de réaliser un mappage inversé en ajoutant une balise .ReverseMap() à la fin de votre CreateMap() chaîne de configuration.

19voto

Darin Dimitrov Points 528142

Dans l'AutoMapper, vous avez un type de Source et un type de Destination. Vous ne pourrez donc établir une correspondance entre ce type de source et ce type de destination que si vous disposez d'un CreateMap correspondant. Donc, pour répondre à vos questions :

  1. Tu ne le fais pas. doivent définissent la cartographie inverse. Vous ne devez le faire que si vous avez l'intention de faire un mapping inverse.
  2. Oui, vous devez appeler CreateMap pour indiquer que ces types sont mappables, sinon une exception sera levée lorsque vous appelez Map<TSource, TDest> vous indiquant qu'il n'existe pas de correspondance entre le type source et le type destination.

11voto

Brian Points 882

J'ai utilisé une méthode d'extension pour faire le mappage dans les deux sens.

    public static IMappingExpression<TDestination, TSource> BothWays<TSource, TDestination>
        (this IMappingExpression<TSource, TDestination> mappingExpression)
    {
        return Mapper.CreateMap<TDestination, TSource>();
    }

l'usage :

 CreateMap<Source, Dest>().BothWays();

1voto

Jim.Carter Points 133
  1. Oui, ou vous pouvez appeler CreateMap<ModelClass, ViewModelClass>().ReverseMap() .
  2. Si deux classes ont le même Member (Property,Field,GetMethod()), vous n'avez pas besoin d'appeler CreateMap<TSrc,TDest> . En fait, si chaque member sur TDest existent tous dans TSrc vous n'avez pas besoin d'appeler CreateMap<TSrc,TDest> . Le code suivant fonctionne.

    class Person { public string Name { get; set; } public int Age { get; set; }
    } class Person2 { public string Name { get; set; } public int? Age { get; set; } public DateTime BirthTime { get; set; } } public class NormalProfile : Profile { public NormalProfile() { //CreateMap<Person2, Person>();// } }

    var cfg = new MapperConfiguration(c => { c.AddProfile<NormalProfile>(); }); //cfg.AssertConfigurationIsValid(); var mapper = cfg.CreateMapper(); var s3 = mapper.Map<Person>(new Person2 { Name = "Person2" });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X