新闻中心

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

2025-11-04
浏览次数:
返回列表
答案: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 显式指定映射:

VALL-E VALL-E

VALL-E是一种用于文本到语音生成 (TTS) 的语言建模方法

VALL-E 134 查看详情 VALL-E
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>>(users)</list> 直接映射集合

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

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


# ai  # 建设网站 报告书  # SEO入门书籍推荐言情  # 鄂州公司推广员招聘网站  # 重庆市网站维护模板建设  # 你有  # 并在  # 适用于  # 是一种  # 是一个  # 新特性  # 游戏开发  # 你在  # 有哪些  # 如何使用  # .net  # microsoft  # app  # 网站建设哪儿好  # 湖州外贸网站优化  # 闽侯网络seo技术  # 船山网站建设  # 关键词排名礻金手指花总  # 石龙镇seo优化推广 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: CSS布局:解决全屏元素100%尺寸与外边距导致的页面溢出问题  如何将HTML表格多行数据保存到Google Sheets  ACG动漫视频网入口 ACG动漫*免费正版观看地址  163邮箱注册官网 免费申请163个人邮箱  知音漫客官网漫画下载_知音漫客网页版阅读记录  c++中的std::launder有什么实际用途_c++对象生命周期与指针优化  不同用户不同价格! 索尼开启账户个性化定价测试  Win11怎么开启省电模式_Win11电池节电模式自动开启  QQ邮箱网页版快速登录 QQ邮箱邮箱账号官方入口地址  AngularJS $http POST请求数据传递与Go后端接收实践  抖音隐秘迷城小游戏入口_ 抖音冒险解谜小游戏秒玩  QQ邮箱正确登录入口_QQ邮箱官方网站使用地址  KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明  一加手机拍照效果不好怎么办 一加哈苏影像调校与专业模式使用教程【高手篇】  UC浏览器官网入口2025最新 UC浏览器网页版正式地址  Pandas DataFrame:高效添加条件计算列  vivo云服务网页版登录 怎么登录vivo云服务网页版  汽水音乐在线版入口_汽水音乐网页播放手册  如何优雅地解决Livewire文件上传难题?SpatieLivewireFilepond让一切变得简单  4399体育竞技小游戏_4399小游戏赛事入口  J*a递归快速排序中静态变量导致数据累积的陷阱与解决方案  格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施  优化Django表单:提交验证失败后保留用户输入  Spring Boot嵌入式服务器与J*a EE:功能支持深度解析  PowerPoint如何制作滚动字幕结尾彩蛋_PowerPoint路径动画实现平滑滚动字幕效果  Bilibili动漫最新防封地址发布-Bilibili动漫2025年最稳正版入口推荐  使用Python高效删除Word宏并转换DOCM为DOCX格式  Win11怎么设置鼠标主按键_Win11鼠标左右键功能互换  HTML元素状态管理:根据DIV内容动态启用/禁用按钮  微信网页版扫码登录入口 微信网页版二维码登录入口  Golang如何优雅处理error_Golang error处理最佳实践总结  Go语言中的*string:深入理解字符串指针  C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用  Node.js中HTML按钮与J*aScript函数交互的正确姿势  J*aScript中localStorage数据的获取、清洗与格式化教程  随机参数递归函数的基准调用次数与时间复杂度探究  Mac终端命令大全_Mac常用Terminal指令速查  Android Studio计算器C键逻辑错误排查与修复:条件判断优化指南  composer的"require-dev"部分是用来做什么的?  Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全  Golang如何实现简单的Web表单_Golang表单提交与验证处理方法  如何在CSS中使用浮动制作导航栏_float实现水平菜单  顺丰快件物流信息 官方网站查询入口  Excel中VLOOKUP的第四个参数是干什么用的_Excel VLOOKUP第四参数作用解析  Win10桌面图标出现小盾牌怎么办 Win10去除UAC图标教程【解决】  谷歌浏览器浏览体验优化_谷歌浏览器新版直连永久可用提示  深入理解Promise链:如何在catch后中断then的执行  向日葵客户端怎么进行远程CentOS控制_向日葵客户端远程CentOS控制操作教程  印象笔记如何设离线包出差查阅_印象笔记设离线包出差查阅【离线阅读】  马斯克:Optimus 人形机器人复数形式为 Optimi 

搜索