在 C# 中使用 AutoMapper 进行对象映射
AutoMapper 是一个对象到对象映射的库,可以简化 DTO (Data Transfer Objects) 和实体类之间的转换。在大型应用程序中,通常需要将业务实体映射到视图模型或 DTO 中,这样可以减少代码的重复性并提高可维护性。本文将详细介绍如何在 C# 项目中使用 AutoMapper,包括安装、配置、以及示例代码。
一、安装 AutoMapper
首先,需要在项目中安装 AutoMapper,可以使用 NuGet Package Manager 进行安装。
在 Visual Studio 中打开 NuGet 包管理控制台,然后运行以下命令:
Install-Package AutoMapper
或者通过 NuGet 管理器搜索 AutoMapper
并进行安装。
二、配置 AutoMapper
安装完成后,需要配置 AutoMapper。通常在应用程序启动时配置,可以在 ASP.NET Core 的 Startup
类中配置,或在普通的控制台应用程序的入口处配置。
-
定义模型和 DTO
让我们首先定义一个简单的模型类和对应的 DTO 类。
public class User { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public DateTime DateOfBirth { get; set; } } public class UserDto { public int Id { get; set; } public string FullName { get; set; } public int Age { get; set; } }
-
创建映射配置
接下来,我们需要配置对象之间的映射关系。在 ASP.NET Core 项目中,可以在
Startup.cs
文件中进行配置。在控制台应用程序中,可以在Main
方法中进行配置。using AutoMapper; using System; public class AutoMapperProfile : Profile { public AutoMapperProfile() { // 配置映射关系 CreateMap<User, UserDto>() .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => $"{src.FirstName} {src.LastName}")) .ForMember(dest => dest.Age, opt => opt.MapFrom(src => DateTime.Now.Year - src.DateOfBirth.Year)); } }
在上面的代码中,我们定义了一个
AutoMapperProfile
类,它继承自Profile
,并在构造函数中配置了User
和UserDto
之间的映射关系。 -
初始化 AutoMapper
然后,我们需要在应用程序启动时初始化 AutoMapper。
在 ASP.NET Core 中,可以在
Startup.cs
中配置:public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddAutoMapper(typeof(Startup)); } }
在控制台应用程序中,可以在
Main
方法中初始化:class Program { static void Main(string[] args) { var config = new MapperConfiguration(cfg => { cfg.AddProfile<AutoMapperProfile>(); }); IMapper mapper = config.CreateMapper(); // 测试映射 var user = new User { Id = 1, FirstName = "John", LastName = "Doe", DateOfBirth = new DateTime(1990, 1, 1) }; var userDto = mapper.Map<UserDto>(user); Console.WriteLine($"Id: {userDto.Id}, FullName: {userDto.FullName}, Age: {userDto.Age}"); } }
在上面的代码中,我们创建了
MapperConfiguration
并添加了我们刚才创建的AutoMapperProfile
。然后,通过CreateMapper
方法创建一个IMapper
实例,并使用它来执行映射操作。
三、使用 AutoMapper
有了上述配置后,就可以使用 AutoMapper 进行对象映射了。以下是一个简单的示例:
var user = new User
{
Id = 1,
FirstName = "John",
LastName = "Doe",
DateOfBirth = new DateTime(1990, 1, 1)
};
var userDto = mapper.Map<UserDto>(user);
Console.WriteLine($"Id: {userDto.Id}, FullName: {userDto.FullName}, Age: {userDto.Age}");
运行该代码后,将输出:
Id: 1, FullName: John Doe, Age: 34
AutoMapper 自动将 User
对象映射到 UserDto
对象,并且根据配置生成了 FullName
和 Age
的值。
四、总结
通过以上示例,您已经学习了如何在 C# 中使用 AutoMapper 进行对象映射。AutoMapper 是一个非常强大的工具,它可以减少手动编写映射代码的工作量,特别是在复杂项目中更是如此。希望本文对您有所帮助!
完整代码示例:
using AutoMapper;
using System;
public class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
public class UserDto
{
public int Id { get; set; }
public string FullName { get; set; }
public int Age { get; set; }
}
public class AutoMapperProfile : Profile
{
public AutoMapperProfile()
{
CreateMap<User, UserDto>()
.ForMember(dest => dest.FullName, opt => opt.MapFrom(src => $"{src.FirstName} {src.LastName}"))
.ForMember(dest => dest.Age, opt => opt.MapFrom(src => DateTime.Now.Year - src.DateOfBirth.Year));
}
}
class Program
{
static void Main(string[] args)
{
var config = new MapperConfiguration(cfg =>
{
cfg.AddProfile<AutoMapperProfile>();
});
IMapper mapper = config.CreateMapper();
var user = new User
{
Id = 1,
FirstName = "John",
LastName = "Doe",
DateOfBirth = new DateTime(1990, 1, 1)
};
var userDto = mapper.Map<UserDto>(user);
Console.WriteLine($"Id: {userDto.Id}, FullName: {userDto.FullName}, Age: {userDto.Age}");
}
}
这段代码可以直接复制到您的项目中并运行,帮助您快速掌握 AutoMapper 的使用。