答案:AutoMapper用于.NET中对象映射,通过安装NuGet包、创建Profile配置映射规则,并在ASP.NET Core中注册服务,实现DTO与实体间自动转换,支持属性重命名、忽略、条件映射等高级功能,提升开发效率。

在 .NET 项目中,AutoMapper 是一个广泛使用的对象映射库,它能自动将一个对象的属性映射到另一个对象,特别适用于 DTO(数据传输对象)与实体模型之间的转换。使用 AutoMapper 可以大幅减少手动赋值代码,提高开发效率。
安装 AutoMapper
在项目中使用 AutoMapper 前,需要通过 NuGet 安装相关包:
- Microsoft.EntityFrameworkCore(如果使用 EF Core)
- AutoMapper
- AutoMapper.Extensions.Microsoft.DependencyInjection(用于集成 ASP.NET Core 依赖注入)
通过 NuGet 包管理器或命令行安装:
dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection配置映射关系
创建一个 Profile 类来定义映射规则。Profile 会自动收集映射配置。
public class MappingProfile : Profile
{
public MappingProfile()
{
CreateMap();
CreateMap(); // 双向映射可选
}
}
假设你有以下两个类:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
}
public class UserDto
{
public int Id { get; set; }
public string Name { get; set; }
public string EmailAddress { get; set; } // 属性名不同
}
若属性名不一致,可使用 ForMember 显式指定映射:
CreateMap() .ForMember(dest => dest.EmailAddress, opt => opt.MapFrom(src => src.Email));
在 ASP.NET Core 中注册服务
在 Program.cs 或 Startup.cs 中注册 AutoMapper:
var builder = WebApplication.CreateBuilder(args); // 添加 AutoMapper 服务 builder.Services.AddAutoMapper(typeof(MappingProfile)); // 指定包含 Profile 的类型
这样 AutoMapper 会自动扫描并加载所有继承自 Profile 的类。
在控制器或服务中使用 IMapper
通过依赖注入获取 IMapper 实例进行映射:
[ApiController]
[Route("[controller]")]
public class UsersController : ControllerBase
{
private readonly IMapper _mapper;
public UsersController(IMapper mapper)
{
_mapper = mapper;
}
[HttpGet("{id}")]
public ActionResult Get(int id)
{
var user = new User { Id = id, Name = "张三", Email = "zhangsan@example.com" };
var dto = _mapper.Map(user);
return Ok(dto);
}
}
高级用法示例
AutoMapper 支持多种映射场景:
-
忽略某些属性:
.ForMember(dest => dest.SomeProp, opt => opt.Ignore()) -
条件映射:
.ForMember(dest => dest.Status, opt => opt.Condition(src => !string.IsNullOrEmpty(src.Status))) - 扁平化映射: 自动将嵌套对象展开(如 Address.City → AddressCity)
-
集合映射:
_mapper.Map直接映射集合- >(users)
基本上就这些。只要定义好 Profile 并正确注入,AutoMapper 能处理大多数常见映射需求,让代码更简洁清晰。










