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

这篇具有很好参考价值的文章主要介绍了【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);  //你的程序集

 

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

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

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

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

 

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

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

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

 

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

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

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

 

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

        在上面的代码中,我们创建了一个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);
      }
  }

 

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

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

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

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

        我们了解了使用Automapper将POCO映射成record的对象的步骤。首先,我们需要安装和配置Automapper,然后定义映射规则。最后,在需要进行映射的地方调用mapper.Map方法即可。这样,我们可以轻松地将POCO对象转换为不可变的record对象。文章来源地址https://www.toymoban.com/news/detail-508588.html

到了这里,关于【C#/.NET】使用Automapper映射record类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot~mybatis-plus中使用TypeHandler做类型映射

    mybatis-plus中,如果数据表字段类型与java实体字段类型不一样,这时就需要做类型映射与转换了,我们一般可以实现TypeHandler接口,或者继承抽象类BaseTypeHandler,我们下面举例来说明一下它的使用方法。 数据表里字段是varchar,java里是List集合,例如:我的爱好标签 数据表里字

    2024年04月24日
    浏览(31)
  • ts定义对象类型Record<string, any>;和object、Object的区别

    Record 是 TS 内置的一个高级类型,是通过映射类型的语法来生成索引类型的 比如传入 \\\'a\\\' | \\\'b\\\' 作为 key,1 作为 value,就可以生成这样索引类型: 所以这里的 Recordstring, any 也就是 key 为 string 类型,value 为任意类型的索引类型,可以代替 object 来用,更加语义化一点: Record 与

    2024年02月16日
    浏览(27)
  • JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封类)

    新的语法结构,勾勒出了 Java 语法进化的一个趋势,将开发者从 复杂、繁琐 的低层次抽象中逐渐解放出来,以更高层次、更优雅的抽象,既 降低代码量 ,又避免意外编程错误的出现,进而提高代码质量和开发效率。 1.1 Java的REPL工具: jShell命令 JDK9的新特性 Java 终于拥有了

    2024年02月06日
    浏览(40)
  • 【前端进阶】-TypeScript高级类型 | 交叉类型、索引签名类型、映射类型

    前言 博主主页👉🏻蜡笔雏田学代码 专栏链接👉🏻【TypeScript专栏】 上篇文章讲解了TypeScript部分高级类型 详细内容请阅读如下:🔽 【前端进阶】-TypeScript高级类型 | 类的初始化、构造函数、继承、成员可见性 今天来学习TypeScript另外一些高级类型! 感兴趣的小伙伴一起来

    2023年04月08日
    浏览(25)
  • sql数据类型映射与数据类型转换

    –odps sql – – –author:宋文理 –create time:2023-03-09 09:36:05 – – – MaxCompute与Hive、Oracle、MySQL的数据类型映射表,如下所示。 MaxCompute数据类型 Hive数据类型 Oracle数据类型 MySQL数据类型 BOOLEAN BOOLEAN 无(说明一) 无(说明二) TINYINT TINYINT NUMBER(3,0) TINYINT SMALLINT SMALLINT NUMBER(5,0) SMALLIN

    2024年02月08日
    浏览(31)
  • TypeScript 学习笔记(六):索引签名类型、映射类型

    keyof 可以用于获取某种类型的所有键,其返回类型是联合类型。 keyof 与 Object.keys 略有相似,只不过 keyof 取 interface 的键 通过例子可以看到,这里的keyof Info其实相当于\\\"name\\\" | “age”。通过和泛型结合使用,TS 就可以检查使用了动态属性名的代码: 接口 基本数据类型 类 如果

    2024年02月17日
    浏览(34)
  • Elasticsearch删除映射类型

    官方解释:https://www.elastic.co/guide/en/elasticsearch/reference/6.0/removal-of-types.html 在elasticsearch6.0.0或更高的版本中创建索引仅能包含单个映射类型。在具有多种映射类型的5.x版本中创建的索引将继续像以前一样在elasticsearch6.x中运行。类型将在elasticsearch7.0.0中的API中弃用,并在8.0.0中完

    2024年02月06日
    浏览(27)
  • Elasticsearch映射与字段类型

    Elasticsearch映射与字段类型 Elasticsearch是一个分布式、实时的搜索和分析引擎,基于Lucene库构建。它可以快速、高效地索引、搜索和分析大量数据。在Elasticsearch中,数据以文档的形式存储,每个文档都有一个唯一的ID。文档可以存储在一个索引中,索引可以存储在一个集群中。

    2024年02月22日
    浏览(55)
  • 23 - 集合与映射类型

    集合类型对象是由具有唯一性的可哈希对象所组成的 无序 多项集。 由于集合类型是无序的,它并不记录元素位置或插入顺序,因此集合类型不支持索引、切片或其他序列类的操作。 类型 对应 构造函数 是否可变 是否可哈希 set set set() 可变 不可哈希 frozenset frozenset

    2024年02月21日
    浏览(28)
  • ElasticSearch第八讲 ES索引字段映射类型以及动态映射相关操作

    ES的映射:映射就是 Mapping,它用来定义一个文档以及文档所包含的字段该如何被存储和索引。所以,它其实有点类似于关系型数据库中表的定义。其中ES中映射可以分为动态映射和静态映射,静态映射就是提前创建好对应字段文档映射关系,如果插入的类型不对会出错,而动

    2024年02月10日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包