Introducción a AutoMapper para C# (.NET)
\n\nEn el desarrollo moderno con C# (.NET), surge con frecuencia la necesidad de transformar un objeto en otro. Esto puede ser necesario al transferir datos entre capas de la aplicación (por ejemplo, desde la base de datos a un DTO para una API), al mapear una ViewModel en una Entity, o al trabajar con diferentes versiones de una API. Escribir código manualmente para cada una de estas transformaciones es una tarea tediosa, propensa a errores y difícil de mantener. Aquí es donde entra en ayuda AutoMapper.
\n\nAutoMapper es una popular biblioteca de código abierto para .NET que automatiza el proceso de mapeo (correspondencia) de las propiedades de un objeto con las de otro. Se basa en el principio de "convención sobre configuración" (convention over configuration). Esto significa que si los nombres y tipos de las propiedades en los objetos de origen y destino coinciden (o siguen ciertas reglas), AutoMapper puede realizar el mapeo sin necesidad de indicar reglas explícitamente. Si las reglas difieren, puede configurarlas fácilmente mediante una API flexible.
\n\nLa biblioteca reduce significativamente la cantidad de código repetitivo, hace que el código sea más limpio, disminuye la cantidad de errores relacionados con la asignación manual y simplifica la refactorización. AutoMapper se utiliza ampliamente en proyectos con ASP.NET Core, WPF, Xamarin y otras aplicaciones .NET.
\n\nInstalación de AutoMapper
\n\nAutoMapper se distribuye a través de NuGet, el administrador de paquetes oficial para .NET. Se puede instalar de varias maneras:
\n\n1. A través de la consola del administrador de paquetes (Package Manager Console)
\nInstall-Package AutoMapper\n\n2. A través de .NET CLI
\ndotnet add package AutoMapper\n\n3. A través de la interfaz de Visual Studio (Manage NuGet Packages)
\nAbra el proyecto -> clic derecho en el proyecto -> "Manage NuGet Packages" -> busque "AutoMapper" -> instale la última versión estable.
\n\nPara trabajar con ASP.NET Core, también se recomienda instalar el paquete AutoMapper.Extensions.Microsoft.DependencyInjection, que simplifica la integración con el contenedor DI:
\ndotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection\n\nInicio rápido: primer mapeo
\n\nVamos a crear un ejemplo muy sencillo. Tenemos una clase UserEntity (de la base de datos) y UserDto (para enviar al cliente).
using AutoMapper;\n\n// 1. Clases de origen y destino\npublic class UserEntity\n{\n public int Id { get; set; }\n public string FirstName { get; set; }\n public string LastName { get; set; }\n public string Email { get; set; }\n}\n\npublic class UserDto\n{\n public int Id { get; set; }\n public string FirstName { get; set; }\n public string LastName { get; set; }\n public string Email { get; set; }\n}\n\n// 2. Creación de la configuración y el Mapper\nvar config = new MapperConfiguration(cfg =>\n{\n cfg.CreateMap<UserEntity, UserDto>();\n});\n\nvar mapper = config.CreateMapper();\n\n// 3. Uso\nvar userEntity = new UserEntity\n{\n Id = 1,\n FirstName = "Iván",\n LastName = "Petrov",\n Email = "ivan@example.com"\n};\n\nvar userDto = mapper.Map<UserDto>(userEntity);\n\nConsole.WriteLine(userDto.FirstName); // Imprime: Iván\n\nEn este ejemplo, creamos un mapa (Map) entre UserEntity y UserDto. Dado que los nombres de las propiedades coinciden, AutoMapper las emparejó automáticamente. El método Map<TDestination>(source) realiza el mapeo y devuelve un nuevo objeto del tipo de destino.
Métodos y funciones principales de AutoMapper
\n\nAutoMapper proporciona una API rica para configurar el mapeo. A continuación se presentan 10 métodos y funciones clave que utilizará con más frecuencia.
\n\n1. CreateMap<TSource, TDestination>()
\nQué hace: Crea una configuración de mapeo entre dos tipos. Este es el método principal para declarar un mapa.