首页 > 编程语言 >【C#/.NET】使用Automapper映射record类型

【C#/.NET】使用Automapper映射record类型

时间:2023-06-29 18:12:14浏览次数:39  
标签:mapper 映射 C# record 对象 Automapper public

        当使用Automapper进行对象映射时,通常我们会使用POCO(Plain Old CLR Object)类作为源对象和目标对象。然而,自从C# 9引入了record类型,它们提供了更简洁、不可变的对象模型。我已经将项目的所有Dto都是用record类型,但是record类型还是有些需要注意的点,本文将介绍如何使用Automapper将POCO映射成record的对象。

        首先,我们需要确保已经安装了Automapper NuGet包。可以通过NuGet包管理器控制台或者Visual Studio的NuGet包管理器来安装

//安装Nuget包
Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection

//服务注册
builder.Services.AddAutoMapper(assembly);  //你的程序集

 

        安装完成后,我们可以在项目中引入Automapper的命名空间,以便在代码中使用Automapper相关的功能。

        接下来,假设我们有一个POCO类Person,具有以下属性:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

 

        现在,我们希望将这个POCO类映射成一个record类型的对象PersonRecord,具有相同的属性:

public record PersonRecord(string FirstName, string LastName, int Age);

 

        在使用Automapper之前,我们需要进行一些配置。可以在应用程序的启动代码或启动器类中进行配置。以下是一个简单的配置示例:

 public class PersonProfile : Profile
 {
     public PersonProfile()
     {
         CreateMap<Person, PersonRecord>();
     }
 }

 

        在上面的代码中,我们创建了一个PersonProfile类,并使用CreateMap方法来定义从Person到PersonRecord的映射。

        现在,我们可以使用mapper对象来执行映射操作了。只需调用mapper.Map方法并传入源对象即可:

public class AutomapperController : ControllerBase
  {
      private readonly IMapper _mapper;

      public AutomapperController(IMapper mapper)
      {
          _mapper = mapper;
      }

      [HttpGet]
      public IActionResult Get()
      {
          Person person = new()
          {
              FirstName = "John",
              LastName = "Doe",
              Age = 30
          };

          PersonRecord personRecord = _mapper.Map<PersonRecord>(person);
          return Ok(personRecord);
      }
  }

 

        通过上面的代码,我们就将Person对象映射成了PersonRecord对象。personRecord对象将具有与person相同的属性值。

        值得注意的是,由于record是不可变的,因此我们只能在创建时初始化其属性,无法在后续代码中修改属性值。因此,在映射过程中,Automapper会自动为record类型的目标对象生成一个构造函数,并根据源对象的属性值进行初始化。

        使用Automapper进行POCO到record的映射还可以处理复杂的场景,包括嵌套对象、集合类型等。只需在配置过程中定义适当的映射规则,Automapper会自动处理属性的映射。

        我们了解了使用Automapper将POCO映射成record的对象的步骤。首先,我们需要安装和配置Automapper,然后定义映射规则。最后,在需要进行映射的地方调用mapper.Map方法即可。这样,我们可以轻松地将POCO对象转换为不可变的record对象。

标签:mapper,映射,C#,record,对象,Automapper,public
From: https://www.cnblogs.com/xuyd/p/17514908.html

相关文章

  • C语言笔记
    C语言学习笔记linux常用指令pwd:查看当前路径cd:进入某个文件夹cd文件夹名cd..——返回上一级cd/——进入根目录cd/home/——进入到相对目录cd~——进入到当前用户......
  • C语言习题
    C语言习题///////////////////////////////////////////////////////////////////////////////////将学生信息打印到文本文件#include<stdio.h>structstudent{intnum;charname[20];floatscore;chargrade;};structstudentstu[5];voidwrite()......
  • CSS基础-背景
    背景background-color背景颜色,可以使用十六进制、rgb、rgba表示。语法/**selector背景元素的原则去*//**color背景颜色的值,可以是颜色名称、十六进制值、RGB、RGBA*/selector{background-color:color;}示例/**设置body标签背景为白色*/body{backg......
  • Spring Security实现多用户系统登录
    由于管理层的突发奇想,硬要把我负责的系统塞到其他的项目中去,而系统之间的用户系统又不同,如果要合并到一起,那改动将是非常大,于是就产生这个多用户系统登录的问题。因为userDetailService是通过用户名来查找用户信息的,所以具体实现得通过多个userDetailService提供用户信息,每个用户......
  • 一文读懂什么是AIGC?
    目录AIGC概念AIGC发展历史在早期萌芽阶段(1950s~1990s)在沉淀累积阶段(1990s~2010s)在快速发展阶段(2010s~至今)ChatGPTAIGC能做什么?电子商务办公游戏娱乐&影视&动漫艺术教育设计&媒体&生活AIGC应用示例AI文本生成写周报写诗写小说写广告词写剧本安排学习计划设定减肥计划写代码AI图片生......
  • tinymce富文本编辑器在vue2使用
    参考https://blog.csdn.net/LJJONESEED/article/details/1278630201.下载[email protected]@tinymce/[email protected].在node_modules中找到tinymce模块下的skins文件夹、jquery.tinymce.js和jquery.tinymce.mini.js这三个文件夹。3.在public中新建tinymce文件......
  • mass mess Monolithic system 单体系统的问题
    1.单体系统太大了最首要的一个原因就是应用系统太大。而由于应用系统的过于庞大,如果仅是单体系统的话,就引发了各种各样的问题,体现在以下三个方面:1.1.系统本身业务复杂,模块众多系统随着时间的发展,业务需求越来越多。而为了满足这些需求,就导致整个系统的模块越来越多。而系统模......
  • c++实现装饰器模式
    1、构建基本类的抽象#include<iostream>classIComponent{public:virtualvoidOperate()=0;private:};2、构建基本类classComponent:publicIComponent{public:voidOperate()override{std::cout<<"基础操作......
  • 机器学习之pytorch环境配置以及cuda安装
     关于conda环境下安装cuda配置和pytorch安装cuda查看显卡型号 (进入cmd环境下) nvidia-smi 下载对应的cudaCUDA Toolkit Archive | NVIDIA Developer)选择与cuda相匹配的版本(版本尽量靠近些电脑的)建议使用迅雷下载,网站下载会限速正式安装安装路径的选择,......
  • Centos7 集群SSH无密码用户免密登录配置
    例:配置集群1的A,B,C三台Centos7的test无密码用户免密登录1,在A机器执行ssh-kengen生成秘钥,一路回车[root@lmslms]#su-test[test@test~]#ssh-keygenGeneratingpublic/privatersakeypair.Enterfileinwhichtosavethekey(/root/.ssh/id_rsa):Enterpassphrase......