.NET如何使用AutoMapper进行对象映射

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

.net如何使用automapper进行对象映射

在 .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<SourceModel, DestinationDto>();
        CreateMap<DestinationDto, SourceModel>(); // 双向映射可选
    }
}
登录后复制

假设你有以下两个类:

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 显式指定映射:

北极象沉浸式AI翻译
北极象沉浸式AI翻译

免费的北极象沉浸式AI翻译 - 带您走进沉浸式AI的双语对照体验

北极象沉浸式AI翻译 0
查看详情 北极象沉浸式AI翻译
CreateMap<User, UserDto>()
    .ForMember(dest => dest.EmailAddress, opt => opt.MapFrom(src => src.Email));
登录后复制

在 ASP.NET Core 中注册服务

Program.csStartup.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<UserDto> Get(int id)
    {
        var user = new User { Id = id, Name = "张三", Email = "zhangsan@example.com" };
        var dto = _mapper.Map<UserDto>(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<List<UserDto>>(users) 直接映射集合

基本上就这些。只要定义好 Profile 并正确注入,AutoMapper 能处理大多数常见映射需求,让代码更简洁清晰。

以上就是.NET如何使用AutoMapper进行对象映射的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号