Cómo trabajar con AutoMapper en C #

AutoMapper es una popular biblioteca de mapeo de objeto a objeto que se puede utilizar para mapear objetos que pertenecen a tipos diferentes. Por ejemplo, es posible que deba asignar los DTO (objetos de transferencia de datos) de su aplicación a los objetos del modelo. AutoMapper le ahorra el tedioso esfuerzo de tener que mapear manualmente una o más propiedades de tipos incompatibles.

Para comenzar a trabajar con AutoMapper, debe crear un proyecto en Visual Studio y luego instalar AutoMapper. Puede instalar AutoMapper desde NuGet usando el siguiente comando en la ventana de la consola del Administrador de paquetes de NuGet:

PM> Instalar paquete de AutoMapper

Crea asignaciones usando AutoMapper

Un mapeador de objeto a objeto como AutoMapper convierte un objeto de entrada de un tipo en un objeto de salida de otro tipo. Considere las siguientes dos clases.

 AuthorModel clase pública

    {

        Id int público

        {

            obtener; conjunto;

        }

        cadena pública FirstName

        {

            obtener; establecer;

        }

        cadena pública Apellido

        {

            obtener; conjunto;

        }

        Dirección de cadena pública

        {

            obtener; conjunto;

        }

    }

 clase pública AuthorDTO

    {

        Id int público

        {

            obtener; conjunto;

        }

        cadena pública FirstName

        {

            obtener; conjunto;

        }

        cadena pública Apellido

        {

            obtener; conjunto;

        }

        Dirección de cadena pública

        {

            obtener; conjunto;

        }

    }

El siguiente fragmento de código muestra cómo puede crear un mapa entre estos dos tipos, AuthorModel y AuthorDTO.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ();

            });

Luego, realizar el mapeo entre los tipos es tan simple como muestra el siguiente código.

IMapper iMapper = config.CreateMapper ();

var source = new AuthorModel ();

var destino = iMapper.Map (fuente);

Un ejemplo de AutoMapper 

Trabajemos ahora con algunos datos. Consulte el siguiente fragmento de código que almacena algunos datos en el objeto de origen y luego muestra los valores de propiedad en el objeto de destino una vez finalizada la asignación.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ();

            });

IMapper iMapper = config.CreateMapper ();

var source = new AuthorModel ();

source.Id = 1;

source.FirstName = "Joydip";

source.LastName = "Kanjilal";

source.Address = "India";

var destino = iMapper.Map (fuente);

Console.WriteLine ("Nombre del autor:" + destino.Primer nombre + "" + destino.LastNombre);

Cuando ejecute el código anterior, se mostrará el nombre del autor almacenado dentro del objeto de destino. Sin embargo, los valores de las propiedades FirstName de destino y LastName de destino serán los mismos que los del objeto de origen porque ha mapeado los objetos correctamente utilizando AutoMapper.

Tenga en cuenta que AutoMapper puede asignar cualquier conjunto de clases. Sin embargo, AutoMapper sigue ciertas convenciones, una de las cuales es que los nombres de propiedad que se asignan deben tener nombres idénticos. Si los nombres de las propiedades no son idénticos, debe informar a AutoMapper cómo se deben asignar las propiedades. Suponiendo que queremos mapear las dos propiedades Contact y ContactDetails, el siguiente ejemplo ilustra cómo se puede lograr.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ()

                .ForMember (destino => destino.Detalles de contacto,

               opts => opts.MapFrom (fuente => fuente.Contacto));

            });

Tenga en cuenta la siguiente declaración que se utiliza para crear el objeto de destino.

var destino = iMapper.Map (fuente);

Si el objeto de destino ya existe, puede utilizar la siguiente declaración.

iMapper.Map (sourceObject, destinationObject);

En esencia, el fragmento de código anterior se puede utilizar para mapear dos objetos que ya existen.

Usar proyecciones en AutoMapper

AutoMapper proporciona un excelente soporte para las proyecciones. Las proyecciones se utilizan para asignar valores de origen a un destino que no coincide con la estructura del origen. (Por el contrario, el mapeo que discutimos anteriormente era un mapeo uno a uno).

Veamos ahora una proyección. Por ejemplo, considere la siguiente clase.

 Dirección de clase pública

    {

        cadena pública Ciudad {get; conjunto; }

        Estado de cadena pública {get; conjunto; }

        cadena pública País {get; conjunto; }

    }

Hagamos que nuestra clase AuthorModel use la clase Address para almacenar la información de dirección de los autores. Así es como se vería la clase AuthorModel actualizada.

 AuthorModel clase pública

    {

        Id int público

        {

            obtener; conjunto;

        }

        cadena pública FirstName

        {

            obtener; establecer;

        }

        cadena pública Apellido

        {

            obtener; conjunto;

        }

        Dirección pública Dirección

        {

            obtener; conjunto;

        }

    }

 Y aquí está la clase AuthorDTO actualizada.

clase pública AuthorDTO

    {

        Id int público

        {

            obtener; conjunto;

        }

        cadena pública FirstName

        {

            obtener; conjunto;

        }

        cadena pública Apellido

        {

            obtener; conjunto;

        }

        cadena pública Ciudad {get; conjunto; }

        Estado de cadena pública {get; conjunto; }

        cadena pública País {get; conjunto; }

    }

Ahora suponga que necesitamos mapear las clases AuthorDTO y AuthorModel. El siguiente fragmento de código ilustra cómo se puede lograr.

var config = new MapperConfiguration (cfg => {

                cfg.CreateMap ()

                   .ForMember (destino => dirección.destino,

              map => map.MapFrom (

                  fuente => nueva dirección

                  {

                      Ciudad = fuente .Ciudad,

                      Estado = fuente .Estado,

                      País = origen País

                  }));

Discutiré las características más avanzadas de AutoMapper en una publicación futura aquí. Hasta entonces, puede obtener más información sobre AutoMapper en este enlace.

Cómo hacer más en C #:

  • Cuándo usar una clase abstracta frente a una interfaz en C #
  • Cómo trabajar con AutoMapper en C #
  • Cómo usar expresiones lambda en C #
  • Cómo trabajar con delegados Action, Func y Predicate en C #
  • Cómo trabajar con delegados en C #
  • Cómo implementar un registrador simple en C #
  • Cómo trabajar con atributos en C #
  • Cómo trabajar con log4net en C #
  • Cómo implementar el patrón de diseño del repositorio en C #
  • Cómo trabajar con la reflexión en C #
  • Cómo trabajar con filesystemwatcher en C #
  • Cómo realizar la inicialización diferida en C #
  • Cómo trabajar con MSMQ en C #
  • Cómo trabajar con métodos de extensión en C #
  • Cómo usar expresiones lambda en C #
  • Cuándo usar la palabra clave volátil en C #
  • Cómo usar la palabra clave yield en C #
  • Cómo implementar polimorfismo en C #
  • Cómo construir su propio programador de tareas en C #
  • Cómo trabajar con RabbitMQ en C #
  • Cómo trabajar con una tupla en C #
  • Explorando métodos virtuales y abstractos en C #