当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2024-05-17 17:49:12 139观看
导读前言在日常开发中,我们常常需要将一个对象映射到另一个对象,这个过程中可能需要编写大量的重复性代码,如果每次都手动编写,不仅会影响开发效率,而且当项目越来越复杂、庞大的时候还容易出现错误。为了解决这个问题,对象映射

前言

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

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

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

AutoMapper对象映射库介绍

AutoMapper是一个简单易用的.NET对象映射库,用于快速、方便地进行对象之间的转换和映射,极大的简化了开发人员在处理对象映射时的工作量。4e428资讯网——每日最新资讯28at.com

  • GitHub开源地址:https://github.com/AutoMapper/AutoMapper
  • 在线文档地址:https://docs.automapper.org/en/stable/Getting-started.html

安装AutoMapper NuGet包

在ASP.NET Core Web API项目中搜索:AutoMapper NuGet包安装。4e428资讯网——每日最新资讯28at.com

图片图片4e428资讯网——每日最新资讯28at.com

创建源对象和目标对象

接下来我们分别定义一个源对象(Student)和一个目标对象(StudentViewModel)。4e428资讯网——每日最新资讯28at.com

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的映射配置文件,并在其中定义源类型和目标类型之间的映射关系。4e428资讯网——每日最新资讯28at.com

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的配置文件)。4e428资讯网——每日最新资讯28at.com

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方法来进行对象映射操作。4e428资讯网——每日最新资讯28at.com

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

映射结果输出

图片图片4e428资讯网——每日最新资讯28at.com

完整示例源代码

  • https://github.com/YSGStudyHards/EasySQLite

图片 图片 4e428资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-88937-0.htmlASP.NET Core Web中使用AutoMapper进行对象映射

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 如何使用 SwiftUI 构建 visionOS 应用

下一篇: 基于Node.js从零构建自动化出码工作流

标签:
  • 热门焦点
  • Golang 中的 io 包详解:组合接口

    Golang 中的 io 包详解:组合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是对Reader和Writer接口的组合,
  • 一篇文章带你了解 CSS 属性选择器

    一篇文章带你了解 CSS 属性选择器

    属性选择器对带有指定属性的 HTML 元素设置样式。可以为拥有指定属性的 HTML 元素设置样式,而不仅限于 class 和 id 属性。一、了解属性选择器CSS属性选择器提供了一种简单而
  • Temu起诉SHEIN,跨境电商战事升级

    Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein&ldquo;利用市场支配力量强迫服装厂商与之签订独家
  • 10天营收超1亿美元,《星铁》比《原神》差在哪?

    10天营收超1亿美元,《星铁》比《原神》差在哪?

    来源:伯虎财经作者:陈平安即便你没玩过《原神》,你一定听说过的它的大名。恨它的人把《原神》开服那天称作是中国游戏史上最黑暗的一天,有粉丝因为索尼在PS平台上线《原神》,怒而
  • 腾讯盖楼,字节拆墙

    腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之&ldquo;想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!&rdquo;曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 年轻人的“职场羞耻感”,无处不在

    年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元&ldquo;人在职场,应该选择什么样的着装?&rdquo;近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • 华为Mate60系列模具曝光:采用硕大圆形后置相机模组+拼接配色方案

    华为Mate60系列模具曝光:采用硕大圆形后置相机模组+拼接配色方案

    据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将迎来更新,有望在9-10月份带来全新的华为Mate60
  • 三星显示已开始为AR设备研发硅基LED微显示屏

    三星显示已开始为AR设备研发硅基LED微显示屏

    7月18日消息,据外媒报道,随着苹果首款头显产品Vision Pro在6月份正式推出,AR/VR/MR等头显产品也就将成为各大公司下一个重要的竞争领域,对显示屏这一关
  • onebot M24巧系列一体机采用轻薄机身设计,现已在各平台开售

    onebot M24巧系列一体机采用轻薄机身设计,现已在各平台开售

    onebot M24 巧系列一体机目前已在线上线下各平台同步开售。onebot M24 巧系列采用一体化轻薄机身设计,最薄处为 10.15mm,拥有宝石红、午夜蓝、石墨绿、雅致
Top
Baidu
map