AutoMapper for C# (.NET) 简介
在现代 C# (.NET) 开发中,经常需要将一个对象转换为另一个对象。这在应用程序层之间传输数据时(例如,从数据库到 API 的 DTO)、映射 ViewModel 到 Entity 时,或处理不同版本的 API 时都是必需的。为每个此类转换手动编写代码是一项繁琐、容易出错且难以维护的工作。正是在这里,AutoMapper 应运而生。
AutoMapper 是一个流行的 .NET 开源库,它自动化了一个对象属性到另一个对象属性的映射过程。它基于“约定优于配置”的原则。这意味着,如果源对象和目标对象中的属性名称和类型匹配(或遵循特定规则),AutoMapper 可以在不显式指定规则的情况下执行映射。如果规则不同,您可以使用灵活的 API 轻松配置它们。
该库显著减少了样板代码的数量,使代码更简洁,减少了与手动赋值相关的错误数量,并简化了重构。AutoMapper 广泛用于 ASP.NET Core、WPF、Xamarin 和其他 .NET 应用程序的项目中。
安装 AutoMapper
AutoMapper 通过 NuGet(.NET 的官方包管理器)分发。可以通过多种方式安装它:
1. 通过包管理器控制台
Install-Package AutoMapper2. 通过 .NET CLI
dotnet add package AutoMapper3. 通过 Visual Studio 界面(管理 NuGet 包)
打开项目 -> 右键点击项目 -> "Manage NuGet Packages" -> 搜索 "AutoMapper" -> 安装最新的稳定版本。
对于 ASP.NET Core 项目,还建议安装 AutoMapper.Extensions.Microsoft.DependencyInjection 包,它简化了与 DI 容器的集成:
dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection快速入门:第一个映射
让我们创建一个最简单的示例。我们有一个 UserEntity 类(来自数据库)和一个 UserDto 类(用于传输到客户端)。
using AutoMapper;
// 1. 源类和目标类public class UserEntity{ public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Email { get; set; }}
public class UserDto{ public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Email { get; set; }}
// 2. 创建配置和 Mappervar config = new MapperConfiguration(cfg =>{ cfg.CreateMap<UserEntity, UserDto>();});
var mapper = config.CreateMapper();
// 3. 使用var userEntity = new UserEntity{ Id = 1, FirstName = "伊万", LastName = "彼得罗夫", Email = "ivan@example.com"};
var userDto = mapper.Map<UserDto>(userEntity);
Console.WriteLine(userDto.FirstName); // 输出:伊万在这个例子中,我们在 UserEntity 和 UserDto 之间创建了一个映射。由于属性名称匹配,AutoMapper 自动映射了它们。Map<TDestination>(source) 方法执行映射并返回一个目标类型的新对象。
AutoMapper 的主要方法和功能
AutoMapper 提供了丰富的 API 来配置映射。以下是您最常使用的 10 个关键方法和功能。
1. CreateMap<TSource, TDestination>()
作用: 在两个类型之间创建映射配置。这是声明映射的主要方法。