2011-02-24 3 views
1

J'ai lu quelques articles et j'ai vu la vidéo de MvcConf 1 dans laquelle Jimmy Bogard démontre l'utilisation d'AutoMapper mais je suis toujours confus.Confusion à propos de l'utilisation d'AutoMapper

J'ai une classe User POCO qui a un tas de propriétés. J'ai aussi une classe RegisterViewModel qui contient un sous-ensemble des propriétés de la classe User. Maintenant, lorsqu'un utilisateur s'enregistre, elle remplira les données dans l'instance vide de RegisterViewModel transmise à la vue. Ensuite, ces données doivent être mappées sur l'instance de l'utilisateur à ajouter à la base de données, mais certaines propriétés de l'utilisateur doivent être saisies comme valeurs par défaut (quelque chose comme RegistrationDate qui doit être affecté à DateTime.Now). Que ferais-je dans ce cas? En outre, supposons que je mette à jour une instance d'utilisateur. Je dois d'abord obtenir les données de la base de données et les mapper à la classe UpdateUserViewModel. Ensuite, lorsque l'utilisateur soumet les modifications, celles-ci doivent être mappées sur l'instance de l'utilisateur. Dans ce cas, dois-je faire deux entrées distinctes Mapper.CreateMap <>() dans mon fichier de configuration ou AutoMapper le fait-il automatiquement pour moi?

Je suppose que c'est pour l'instant, votre aide sera grandement appréciée! :)

Répondre

5

Pour le premier scénario vous pouvez définir les propriétés manquantes dans votre cartographie:

Mapper 
    .CreateMap<RegisterViewModel, User>() 
    .ForMember(
     dest => dest.RegistrationDate, 
     opt => opt.UseValue(DateTime.Now) 
    ); 

Pour le deuxième scénario, vous avez besoin de deux applications distinctes, car AutoMapper ne définit pas automatiquement les correspondances bi-directionnelles:

Mapper.CreateMap<UpdateUserViewModel, User>(); 
Mapper.CreateMap<User, UpdateUserViewModel>(); 
+0

Ah je vois. Merci beaucoup Darin! Je vais jouer avec AutoMapper et essayer de me familiariser avec ça. – Kassem

+1

Notez que UseValue avec DateTime.Now n'est pas correct, car vous obtiendrez la même date à chaque fois, ce qui rend très difficile le suivi des bogues. Voir ceci: http://automapper.codeplex.com/workitem/4056 – andreialecu

Questions connexes