首页 > 编程语言 >ASP.NET Core Web中使用AutoMapper进行对象映射

ASP.NET Core Web中使用AutoMapper进行对象映射

时间:2024-05-17 09:18:49浏览次数:25  
标签:Core ASP Name 映射 Web Display set AutoMapper public

前言

在日常开发中,我们常常需要将一个对象映射到另一个对象,这个过程中可能需要编写大量的重复性代码,如果每次都手动编写,不仅会影响开发效率,而且当项目越来越复杂、庞大的时候还容易出现错误。为了解决这个问题,对象映射库就随之而出了,这些库可以自动完成对象之间的映射,从而减少大量的开发工作量,提高开发工作效率。今天我们来讲讲在ASP.NET Core Web中使用AutoMapper快速进行对象映射。

使用对象映射库有哪些好处?

  • 减少开发工作量,提高开发效率。
  • 减少开发过程中的错误和bug。
  • 简化代码结构,提高代码可读性和可维护性。

AutoMapper对象映射库介绍

AutoMapper是一个简单易用的.NET对象映射库,用于快速、方便地进行对象之间的转换和映射,极大的简化了开发人员在处理对象映射时的工作量。

安装AutoMapper NuGet包

在ASP.NET Core Web API项目中搜索:AutoMapper NuGet包安装。

创建源对象和目标对象

接下来我们分别定义一个源对象(Student)和一个目标对象(StudentViewModel)。

Student(源对象)

    public class Student
    {
        /// <summary>
        /// 学生ID [主键,自动递增]
        /// </summary>
        [PrimaryKey, AutoIncrement]
        [Display(Name = "学生ID")]
        public int StudentID { get; set; }

        /// <summary>
        /// 班级ID
        /// </summary>
        [Display(Name = "班级ID")]
        public int ClassID { get; set; }

        /// <summary>
        /// 学生姓名
        /// </summary>
        [Display(Name = "学生姓名")]
        public string Name { get; set; }

        /// <summary>
        /// 学生年龄
        /// </summary>
        [Display(Name = "学生年龄")]
        public int Age { get; set; }

        /// <summary>
        /// 学生性别
        /// </summary>
        [Display(Name = "学生性别")]
        public string Gender { get; set; }
    }

StudentViewModel(目标对象)

    public class StudentViewModel
    {
        /// <summary>
        /// 学生ID [主键,自动递增]
        /// </summary>
        [PrimaryKey, AutoIncrement]
        [Display(Name = "学生ID")]
        public int StudentID { get; set; }

        /// <summary>
        /// 班级ID
        /// </summary>
        [Display(Name = "班级ID")]
        public int ClassID { get; set; }

        /// <summary>
        /// 学生姓名
        /// </summary>
        [Display(Name = "学生姓名")]
        public string Name { get; set; }

        /// <summary>
        /// 学生年龄
        /// </summary>
        [Display(Name = "学生年龄")]
        public int Age { get; set; }

        /// <summary>
        /// 学生性别
        /// </summary>
        [Display(Name = "学生性别")]
        public string Gender { get; set; }

        /// <summary>
        /// 班级名称
        /// </summary>
        [Display(Name = "班级名称")]
        public string ClassName { get; set; }
    }

配置AutoMapper映射规则

我们可以定义一个AutoMapperMappingProfile的映射配置文件,并在其中定义源类型和目标类型之间的映射关系。

using AutoMapper;
using Entity;
using Entity.ViewModel;

namespace WebApi
{
    /// <summary>
    /// AutoMapper映射配置文件
    /// </summary>
    public class AutoMapperMappingProfile : Profile
    {
        /// <summary>
        /// 添加映射规则
        /// </summary>
        public AutoMapperMappingProfile()
        {
            CreateMap<Student, StudentViewModel>();
        }
    }
}

Program中注册AutoMapper服务

使用AddAutoMapper()方法可以将AutoMapper所需的服务添加到该集合中,以便在应用程序的其他部分中使用。该方法需要传入一个Assembly数组,以告诉AutoMapper要扫描哪些程序集来查找映射配置(在当前作用域的所有程序集里面扫描AutoMapper的配置文件)。

        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);

            builder.Services.AddControllers();

            //添加 AutoMapper 的配置
            //使用AddAutoMapper()方法可以将AutoMapper所需的服务添加到该集合中,以便在应用程序的其他部分中使用。
            //该方法需要传入一个Assembly数组,以告诉AutoMapper要扫描哪些程序集来查找映射配置(在当前作用域的所有程序集里面扫描AutoMapper的配置文件)。
            builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());

        }

进行对象映射操作

依赖注入获取IMapper接口的实例

    /// <summary>
    /// 学生管理
    /// </summary>
    [ApiController]
    [Route("api/[controller]/[action]")]
    public class StudentController : ControllerBase
    {
        private readonly IMapper _mapper;

        /// <summary>
        /// 依赖注入
        /// </summary>
        /// <param name="mapper">mapper</param>
        public StudentController(IMapper mapper)
        {
            _mapper = mapper;
        }
    }

进行对象映射操作

接下来我们使用使用IMapper接口的Map方法来进行对象映射操作。

var studentsListDto = _mapper.Map<List<StudentViewModel>>(students);

映射结果输出

完整示例源代码

DotNetGuide技术社区交流群

  • DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目框架推荐、求职和招聘资讯、以及解决问题的平台。
  • 在DotNetGuide技术社区中,开发者们可以分享自己的技术文章、项目经验、学习心得、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
  • 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。

欢迎加入DotNetGuide技术社区微信交流群

标签:Core,ASP,Name,映射,Web,Display,set,AutoMapper,public
From: https://www.cnblogs.com/Can-daydayup/p/18197033

相关文章

  • Dapr 与 .NET Aspire 结合使用获得无与伦比的本地开发体验
    Dapr提供了一组构建块,用于抽象分布式系统中常用的概念。这包括服务、缓存、工作流、复原能力、机密管理等之间的安全同步和异步通信。不必自己实现这些功能,可以消除样板,降低复杂性,并允许您专注于开发业务功能。在您的时间有限并且您只想进行实验的情况下,在Dapr初始设置上花费大量......
  • .NET ASPIRE 预览版 7 发布
    .NETAspire预览版7并不是原计划的一部分,此预览版有很多重大API更改,部分原因是一旦产品发布,我们将致力于稳定的API表面。可以说,Aspire团队希望确保在最终发布之前完成这些API更改。但作为开发人员,我们会喜欢能够对快速发展的开发生态系统中的变化做出快速反应。.NETAsp......
  • .Net6 web API (IOC容器内置)
    前沿内置I0C容器使用1.分层架构,上层调用下层12.具备抽象【接口和抽象类】和实现【普通类】3.注册抽象和具体之间的关系4.通过构造函数注入【内置容器仅支持构造函数注入】 IOC容器的主要作用是管理应用程序中的各种服务、组件和依赖关系,并在需要时将它们注入到其他组件......
  • windows 安装.net6core webapi
    windows安装.net6corewebapi:1.下载安装dotnet-hosting-6.0.0-win.exe(Windows HostingBundle--runtime)https://dotnet.microsoft.com/en-us/download/dotnet/6.02..netcorewebapi右键发布publish,复制发布的文件到windows服务器iis站点webapi3.启动windowspowersh......
  • Jenkins: Webhook触发多分支流水线项目构建
    总共发现了两种配置方法,分别是通过不同的插件实现GenericWebhookTrigger安装插件:GenericWebhookTrigger在Jenkinsfile中,添加配置:triggers{GenericTrigger(//构建时的标题causeString:'Triggeredby$ref',//获取POST参......
  • JS — webscoket详解
    一.基本概念WebSocket是一种在Web浏览器和服务器之间建立全双工通信的协议。它允许网页实时地发送和接收数据,而不需要页面刷新或像传统HTTP协议那样的轮询操作。WebSocket使用HTTP协议进行握手,并通过Upgrade头字段指定从HTTP到WebSocket的转换。一旦握手成功,WebSocket连接就会......
  • webpack相关知识点
    一、webpack打包过程。首先读取配置文件,确定入口文件及其依赖关系,然后,从入口文件开始,递归解析所有模块,通过相应的加载器(loaders)处理不同类型的文件内容,如Javascript、css等。接着,使用插件(plugins)执行额外的任务,如代码压缩、环境变量注入等。最后,将处理后的模块按照指定的格式......
  • Cisco Secure Web Appliance Virtual 15.2.0 GD - 适用于网络安全的思科高级威胁防护
    CiscoSecureWebApplianceVirtual15.2.0GD-适用于网络安全的思科高级威胁防护AsyncOSforWSA15GeneralDeployment(GD)请访问原文链接:CiscoSecureWebApplianceVirtual15.2.0GD-适用于网络安全的思科高级威胁防护,查看最新版。原创作品,转载请保留出处。作者主......
  • Cisco Secure Email and Web Manager Virtual 15.5.1 GD - 集中管理思科安全设备
    CiscoSecureEmailandWebManagerVirtual15.5.1GD-集中管理思科安全设备AsyncOSforSMA15GeneralDeployment(GD)请访问原文链接:CiscoSecureEmailandWebManagerVirtual15.5.1GD-集中管理思科安全设备,查看最新版。原创作品,转载请保留出处。作者主页:sysin.......