【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 ...
随机推荐
- [SVN]SVN checkout 功能不可用 右键只看到提交和更新,没有显示checkout[转载]
不要在受SVN控制的文件夹里点右键,因为这个文件夹已经在SVN控制之下,当然不会允许在里面嵌套另一个SVN版本库 换个不受控的文件夹点右键,比如: D盘根目录 X 参考文献 SVN checkout ...
- 解Bug之路-应用999线升高
前言 监控指标诚然是发现问题于微末之时的极佳手段,但指标往往有其表达的极限.在很多情况下,单独看一个黄金指标并不能表征系统的健康程度,反而有可能被其迷惑,进而忽略相关问题.(本文所提及的Linux K ...
- xtrabackup: error: xb_load_tablespaces() failed with error code 57
问题描述:在数据库上运行xtrabackup备份脚本出现的一些报错 DB_version:mysql8.0.26 Xtrabackup:percona-xtrabackup-8.0.27-19-Lin ...
- XXL-JOB定时任务框架(Oracle定制版)
特点 xxl-job是一个轻量级.易扩展的分布式任务调度平台,能够快速开发和简单学习.开放源代码并被多家公司线上产品使用,开箱即用.尽管其确实非常好用,但我在工作中使用的是Oracle数据库,因为xx ...
- RDIFramework.NET开发框架编码管理助力业务编码的自动处理
1.概述 几乎每一个企业应用中不可避免的都会涉及到业务编码规则的问题,比如订单管理中的订单编号,商品管理中的商品编码,项目管理中的项目编码等等,针对这一系列的编码如果直接写在程序中,不仅复杂,代码重复 ...
- 【vue3-element-admin】ESLint+Prettier+Stylelint+EditorConfig 约束和统一前端代码规范
前言 本文介绍 vue3-element-admin 如何通过ESLint 检测 JS/TS 代码.Prettier 格式化代码.Stylelint 检测 CSS/SCSS 代码和配置 EditorC ...
- 家用wife密码设置
1.在浏览器上面输入ip地址:http://192.168.1.1/或http://192.168.0.1/出现路由器登陆窗口输入用户名跟密码.用户名默认一般为:admin,密码为空或为:admin ...
- Linux rsyslogd服务学习
本篇笔记来自该博客: http://c.biancheng.net/view/1097.html 服务简介 在CentOS 6.x 中日志服务已经由 rsyslogd 取代了原先的 syslogd.r ...
- live555中ts流详细解析
live555中ts流详细解析 该文档主要是对live555源码下testProgs中testMPEG2TransportStreamer服务器端的详细分析.主要分析ts流实现的总体调用流程.(重新整 ...
- 数据分析05-matplotlib基本绘图、高级绘图
数据分析-05 数据分析-05 matplotlib基本功能详解 基本绘图 1)绘图核心API 2)设置线型.线宽 3)设置坐标轴范围 4)设置坐标刻度 5)设置坐标轴 6)图例 7)特殊点 8)备注 ...