C# 中使用 AutoMapper 进行对象映射的实用步骤

embedded/2024/11/28 23:18:57/

在C#中,AutoMapper 是一个功能强大的对象-对象映射器,它能够在不同类型的对象之间自动进行属性值的复制。这在层与层之间的数据传输对象(DTOs)和实体(Entities)之间的转换中特别有用。以下是如何在 C# 中使用 AutoMapper 进行对象映射的基本步骤:

1. 安装 AutoMapper

首先,需要通过 NuGet 包管理器安装 AutoMapper。在 Visual Studio 的“包管理器控制台”中,可以运行以下命令:

Install-Package AutoMapper
Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection

第一个包是 AutoMapper 的核心库,第二个包是用于将 AutoMapper 集成到 ASP.NET Core 依赖注入系统中的扩展。

2. 创建源对象和目标对象

假设有一个简单的源对象(比如 UserEntity)和一个目标对象(比如 UserDto)。

public class UserEntity
{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 DisplayName { get; set; }public string MailAddress { get; set; }
}

3. 创建映射配置

接下来,需要创建一个映射配置类,在这个类中定义源对象到目标对象的映射规则。

public class MappingProfile : Profile
{public MappingProfile(){CreateMap<UserEntity, UserDto>().ForMember(dest => dest.DisplayName, opt => opt.MapFrom(src => src.Name)).ForMember(dest => dest.MailAddress, opt => opt.MapFrom(src => src.Email));}
}

4. 配置依赖注入

在 ASP.NET Core 应用中,需要在 Startup.cs 文件中的 ConfigureServices 方法中配置 AutoMapper 的依赖注入。

public void ConfigureServices(IServiceCollection services)
{// 其他服务配置...services.AddAutoMapper(typeof(Startup)); // 或者 typeof(MappingProfile) 取决于配置类位置
}

如果使用的是 .NET 6 或更高版本,并且使用的是最小 API 配置,可能需要在 Program.cs 文件中配置 AutoMapper。

var builder = WebApplication.CreateBuilder(args);// 其他服务配置...builder.Services.AddAutoMapper(typeof(Program)); // 或者映射配置类var app = builder.Build();// 配置中间件...

5. 使用 AutoMapper 进行映射

现在,可以在服务或控制器中使用 AutoMapper 的 IMapper 接口来进行对象映射。

public class UserService
{private readonly IMapper _mapper;public UserService(IMapper mapper){_mapper = mapper;}public UserDto ConvertToDto(UserEntity userEntity){return _mapper.Map<UserDto>(userEntity);}
}

在控制器中,可以通过构造函数注入 IMapper 或使用 ASP.NET Core 的依赖注入特性(如 [FromServices] 属性)来获取 IMapper 实例。

[ApiController]
[Route("[controller]")]
public class UserController : ControllerBase
{private readonly UserService _userService;private readonly IMapper _mapper;public UserController(UserService userService, IMapper mapper){_userService = userService;_mapper = mapper;}[HttpGet("{id}")]public IActionResult GetUser(int id){// 假设有一个方法来获取 UserEntityUserEntity userEntity = GetUserEntityById(id); // 这是一个假设的方法UserDto userDto = _mapper.Map<UserDto>(userEntity);// 或者使用 _userService.ConvertToDto(userEntity);return Ok(userDto);}// 假设的获取 UserEntity 的方法private UserEntity GetUserEntityById(int id){// 这里应该是从数据库或其他数据源获取 UserEntity 的逻辑return new UserEntity { Id = id, Name = "John Doe", Email = "john.doe@example.com" };}
}

通过以上步骤,我们就可以在 C# 中使用 AutoMapper 进行对象映射了。AutoMapper 极大地简化了对象之间的转换工作。


http://www.ppmy.cn/embedded/141287.html

相关文章

使用青果代理IP爬取豆瓣TOP250电影数据

本文目录 1.1 引言1.2 为什么需要代理IP&#xff1f;2.1 青果代理IP的优势2.2 获取青果代理IP2.3 实战爬取豆瓣TOP250电影3.总结 1.1 引言 电商平台、社交平台、自媒体等平台大数据爆炸的现在&#xff0c;采用爬虫采集数据已经是当下最高效、精准地获取数据方式&#xff0c;但…

记录下在html文件中如何直接使用npm依赖,以threejs为例

参考&#xff1a; https://www.cnblogs.com/shayloyuki/p/17191489.html 共三种方式 我的代码截图 方式一&#xff1a; threejsDemo_script.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&…

深度学习之PSPNet

场景解析对于无限制的开放词汇和不同场景来说是具有挑战性的.本文使用文中的pyramid pooling module实现基于不同区域的上下文集成&#xff0c;提出了PSPNet&#xff0c;实现利用上下文信息的能力进行场景解析。    作者认为&#xff0c;FCN存在的主要问题是没有采取合适的策…

区块链游戏的新观察:自治世界能否成为未来链游的突破口?

区块链游戏&#xff08;链游&#xff09;作为加密领域的创新方向&#xff0c;一直被寄予厚望。然而&#xff0c;尽管各类链游层出不穷&#xff0c;大多只是靠代币激励一时爆火&#xff0c;缺乏持久吸引力。这种现象让人对链游未来的发展充满疑虑&#xff1a;是否有一种全新的设…

卷积神经网络(CNN)中的批量归一化层(Batch Normalization Layer)

批量归一化层&#xff08;BatchNorm层&#xff09;&#xff0c;或简称为批量归一化&#xff08;Batch Normalization&#xff09;&#xff0c;是深度学习中常用的一种技术&#xff0c;旨在加速神经网络的训练并提高收敛速度。 一、基本思想 为了让数据在训练过程中保持同一分布…

JavaScript零基础入门速通(上)

目录 1. JavaScript 简介 2. JavaScript 的运行环境 2.1 浏览器端 2.2 服务器端&#xff08;Node.js&#xff09; 3. JavaScript 基础语法 3.1 变量声明 3.2 数据类型 3.3 运算符 3.3.1 算术运算符 .3.2 比较运算符 3.3.3 逻辑运算符 3.4 控制流 3.4.1 条件语句 …

python的openpyxl库设置表格样式:字体/边框/对齐/颜色等

学习目录 1. 安装和使用openpyxl库设置表格样式 2 设置字体font 3 设置边框 4 设置对齐方式 5 设置单元格数据格式 6 设置行高和列宽 7 填充单元格颜色 附录-关于颜色说明 本章节主要介绍如何使用openpyxl库设置表格中的一些样式&#xff0c;比如字体&#xff0c;边框…

大语言模型LLM的微调代码详解

代码的摘要说明 一、整体功能概述 这段 Python 代码主要实现了基于 Hugging Face Transformers 库对预训练语言模型&#xff08;具体为 TAIDE-LX-7B-Chat 模型&#xff09;进行微调&#xff08;Fine-tuning&#xff09;的功能&#xff0c;使其能更好地应用于生成唐诗相关内容的…