Overblog Suivre ce blog
Editer l'article Administration Créer mon blog

Présentation

  • : Romagny13 - Du .NET,du pur .NET
  • Romagny13 - Du .NET,du pur .NET
  • : Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions
  • Contact

Recherche

Articles Récents

16 avril 2014 3 16 /04 /avril /2014 15:07

 

AutoMapper est une librairie permettant de gérer facilement le Mapping et ainsi s'astreindre d'une tâche pas forcément passionnante (écrire une à une ses classes de Mapping)   

  • Chercher « AutoMapper » depuis le Gestionnaire de package NuGet

  • Ou taper dans la console du gestionnaire de package

    PM> Install-Package AutoMapper

     

     

Exemple :

On a

  • une classe Client (concrètement cela pourrait être une classe générée avec EDM ou Linq To SQL) « la source »

  • une classe ClientModel qui sera « la destination »

  • Un service qui permet de récupérer une IList<Client>  et doit renvoyer une IList<ClientModel>

  public class Client

    {

        public int Id { get; set; }

        public string Name { get; set; }

        public string Email { get; set; }

    }

    public class ClientModel

    {

        public int ClientID { get; set; }

        public string ClientFullName { get; set; }

        public string Email { get; set; }

    }

 

 

On définit d’abord le mappage pour la source et la destination

Mapper.CreateMap<Client, ClientModel>()

                .ForMember(c => c.ClientID, options => options.MapFrom(source => source.Id))

                .ForMember(c => c.ClientFullName, options => options.MapFrom(source => source.Name))

                .ForMember(c => c.Email, options => options.MapFrom(source => source.Email));

     

Puis

            foreach (Client clientSource in clients)

            {

                ClientModel clientDestination = Mapper.Map<ClientModel>(clientSource);

                result.Add(clientDestination);

            }

Plusieurs écritures possibles .Il est possible de définir le nom de chaque propriété soit en chaine de caractères, ou avec une expression(mieux car cela permet d’éviter les erreurs de syntaxe)

                ClientModel clientDestination = Mapper.Map<ClientModel>(clientSource);

                result.Add(clientDestination);

 

Ou

                ClientModel clientDestination = new ClientModel();

                result.Add(Mapper.Map(clientSource, clientDestination));

Il serait bien sûr possible de mettre en forme la valeur avec string.Format

On peut imaginer d’autres utilisations .Par exemple le mapping entre un « Model » et un « ViewModel »

 

Le service

    public interface IClientService

    {

        IList<ClientModel> GetAll();

    }

    public class ClientService : IClientService

    {

        private IList<Client> clients = new List<Client>(){

                        new Client(){Id=1,Name="Bellin, Marie",Email="bellinmarie@live.com"},

                        new Client(){Id=2,Name="Adams, Terry",Email="adamsterry123@live.com"},

        };

 

        public IList<ClientModel> GetAll()

        {

            IList<ClientModel> result= new List<ClientModel>();

 

            Mapper.CreateMap<Client, ClientModel>()

                .ForMember(c => c.ClientID, options => options.MapFrom(source => source.Id))

                .ForMember(c => c.ClientFullName, options => options.MapFrom(source => source.Name))

                .ForMember(c => c.Email, options => options.MapFrom(source => source.Email));

 

            // la liste de clients pourrait être récupérée avec EDM ou Linq To SQL

            foreach (Client clientSource in clients)

            {

                //ClientModel clientDestination = new ClientModel();

                //result.Add(Mapper.Map(clientSource, clientDestination));

                // ou

                ClientModel clientDestination = Mapper.Map<ClientModel>(clientSource);

                result.Add(clientDestination);

            }

 

            return result;

        }

    }

 

https://github.com/AutoMapper/AutoMapper

Partager cet article

Repost 0
Published by Romagny13 - dans C
commenter cet article

commentaires