AutoMapper para C# (.NET): guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción a AutoMapper para C# (.NET)

\n\n

En 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\n

AutoMapper 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\n

La 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\n

Instalación de AutoMapper

\n\n

AutoMapper se distribuye a través de NuGet, el administrador de paquetes oficial para .NET. Se puede instalar de varias maneras:

\n\n

1. A través de la consola del administrador de paquetes (Package Manager Console)

\n
Install-Package AutoMapper
\n\n

2. A través de .NET CLI

\n
dotnet add package AutoMapper
\n\n

3. A través de la interfaz de Visual Studio (Manage NuGet Packages)

\n

Abra el proyecto -> clic derecho en el proyecto -> "Manage NuGet Packages" -> busque "AutoMapper" -> instale la última versión estable.

\n\n

Para 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:

\n
dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection
\n\n

Inicio rápido: primer mapeo

\n\n

Vamos a crear un ejemplo muy sencillo. Tenemos una clase UserEntity (de la base de datos) y UserDto (para enviar al cliente).

\n\n
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\n

En 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.

\n\n

Métodos y funciones principales de AutoMapper

\n\n

AutoMapper 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\n

1. CreateMap<TSource, TDestination>()

\n

Qué hace: Crea una configuración de mapeo entre dos tipos. Este es el método principal para declarar un mapa.

Recommendations