【C#/.NET】使用Automapper映射record类型
当使用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对象。
【C#/.NET】使用Automapper映射record类型的更多相关文章
- 配置AutoMapper映射规则《转》
配置AutoMapper映射规则 AutoMapper是基于约定的,因此在实用映射之前,我们需要先进行映射规则的配置. public class Source { public int SomeVal ...
- 09.AutoMapper 之自定义类型转换器(Custom Type Converters)
https://www.jianshu.com/p/47054d92db2a 自定义类型转换器(Custom Type Converters) 有时需要完全控制一种类型到另一种类型的转换.这一般发生在 ...
- ASP.NET Core搭建多层网站架构【8.2-使用AutoMapper映射实体对象】
2020/01/29, ASP.NET Core 3.1, VS2019, AutoMapper.Extensions.Microsoft.DependencyInjection 7.0.0 摘要:基 ...
- 攻城狮在路上(壹) Hibernate(十)--- 映射值类型集合
一.映射Set(集):未排序,无重复. 实例代码: <set name="images" table="IMAGES" lazy="true&q ...
- delphi2006语言新特性:Record类型高级用法
delphi语言在传统的Records类型的基础上增加了许多像类一样的高级功能,如:Records可以有属性和方法(包括构造constructors),类属性,类方法,类静态字段和内嵌类型.下面这个示 ...
- hibernate字段映射枚举类型
上一篇介绍了mybatis字段映射枚举类型,这一篇给大家介绍一下hibernate字段怎么去映射枚举类型的(这只是一种参考方式,映射方法还有很多种). 还是以上篇sku表为例,sku表里一个statu ...
- oralce 存储过程传入 record 类型的参数?
先定义一个 package , package中含有一个 record 类型的变量 create or replace package pkg_record is type emp_record is ...
- Java SE 16 record 类型说明与使用
Java SE 16 record 类型说明与使用 作者:Grey 原文地址: 博客园:Java SE 16 record 类型说明与使用 CSDN:Java SE 16 record 类型说明与使用 ...
- AutoMapper在MVC中的运用04-string映射各种类型、一个属性映射多个属性等
本篇AutoMapper使用场景: ※ 类型转换,源string类型分别转换成int, DateTime,Type ※ 源和目标都包含复杂类型属性 ※ 把源中的一个属性映射到目标中的多个属性 类型转换 ...
- 使用 AutoMapper 映射 IDataReader、DataSet、DataTable 到实体类
AutoMapper是一个.NET的对象映射工具. 项目地址:https://github.com/AutoMapper/AutoMapper. 帮助文档:https://github.com/Aut ...
随机推荐
- [Java SE]Java版本特性解读:java.util.Optional [JDK1.8-]
1 概述 本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空(null/empty). Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范 ...
- xtrabackup+MySQL8全备+增备脚本
问题描述:运用xtrabackup进行mysql全备,mysql8之前使用的是innodbxtrabackup,mysql8之后开始使用xtrabackup,innobackupex把功能都集成到xt ...
- 基于Python的爬虫案例
案例1:使用爬虫爬取京东华为手机用户评论 本案例借鉴哔哩哔哩博客主视频教程,感谢其教程为我开启了爬虫之旅:https://www.bilibili.com/video/BV1Yt4y1Y7nt?t=3 ...
- java项目 学生成绩管理系统 (源码+数据库文件)
需要的私信我 备注来意:项目名称 来了就点个赞再走呗,即将毕业的兄弟有福了 文章底部获取源码 java项目 学生成绩管理 (源码+数据库文件)技术框架:java+springboot+vue+m ...
- .Net 6.0 部署Linux+Nginx +PM2教程
今天带大家将本地.Net6.0项目部署到Linux系统中,其中有用到Nginx反向代理和PM2进程管理工具,希望本偏文章能对你有所帮助,成为你成功路上的垫脚石! 背景: 在.Net 5.0横空出世之后 ...
- 深度学习-08(PaddlePaddle文本分类)
深度学习-08(PaddlePaddle文本分类) 文章目录 深度学习-08(PaddlePaddle文本分类) NLP概述 NLP基本概念 什么是NLP NLP的主要任务 传统NLP方法 传统NLP ...
- ADB-安装配置
一.只要下载ADB安装包即可 就这4个文件: 备注:如果下载放入到D盘去解压,打开dos窗口那么就要进入到D盘,然后再去执行adb命令,输入adb查看它是否安装成功 二.ADB命令简单使用 查看连接设 ...
- MQTT.fx的安装和使用
一.下载和安装 MQTT.fx支持Windows/Linux/Mac,附下载地址:http://www.jensd.de/apps/mqttfx/,下载完成之后双击进行安装. 二.配置使用 打开软件, ...
- 2023-04-25:给定两个长度为N的数组,a[]和b[] 也就是对于每个位置i来说,有a[i]和b[i]两个属性 i a[i] b[i] j a[j] b[j] 现在想为了i,选一个最
2023-04-25:给定两个长度为N的数组,a[]和b[] 也就是对于每个位置i来说,有a[i]和b[i]两个属性 i a[i] b[i] j a[j] b[j] 现在想为了i,选一个最好的j位置, ...
- 2022-11-02:以下go语言代码输出什么?A:编译错误;B:apple;C:ant;D:panic。 package main import “fmt“ func main() {
2022-11-02:以下go语言代码输出什么?A:编译错误:B:apple:C:ant:D:panic. package main import "fmt" func main( ...