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

打印 上一主题 下一主题

主题 630|帖子 630|积分 1890

​        当使用Automapper进行对象映射时,通常我们会使用POCO(Plain Old CLR Object)类作为源对象和目标对象。然而,自从C# 9引入了record类型,它们提供了更简洁、不可变的对象模型。我已经将项目的所有Dto都是用record类型,但是record类型还是有些需要注意的点,本文将介绍如何使用Automapper将POCO映射成record的对象。
        首先,我们需要确保已经安装了Automapper NuGet包。可以通过NuGet包管理器控制台或者Visual Studio的NuGet包管理器来安装
  1. //安装Nuget包
  2. Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection
  3. //服务注册
  4. builder.Services.AddAutoMapper(assembly);  //你的程序集
复制代码
 
        安装完成后,我们可以在项目中引入Automapper的命名空间,以便在代码中使用Automapper相关的功能。
        接下来,假设我们有一个POCO类Person,具有以下属性:
  1. public class Person
  2. {
  3.     public string FirstName { get; set; }
  4.     public string LastName { get; set; }
  5.     public int Age { get; set; }
  6. }
复制代码
 
        现在,我们希望将这个POCO类映射成一个record类型的对象PersonRecord,具有相同的属性:
  1. public record PersonRecord(string FirstName, string LastName, int Age);
复制代码
 
        在使用Automapper之前,我们需要进行一些配置。可以在应用程序的启动代码或启动器类中进行配置。以下是一个简单的配置示例:
  1. public class PersonProfile : Profile
  2. {
  3.      public PersonProfile()
  4.      {
  5.          CreateMap<Person, PersonRecord>();
  6.      }
  7. }
复制代码
 
        在上面的代码中,我们创建了一个PersonProfile类,并使用CreateMap方法来定义从Person到PersonRecord的映射。
        现在,我们可以使用mapper对象来执行映射操作了。只需调用mapper.Map方法并传入源对象即可:
  1. public class AutomapperController : ControllerBase
  2.   {
  3.       private readonly IMapper _mapper;
  4.       public AutomapperController(IMapper mapper)
  5.       {
  6.           _mapper = mapper;
  7.       }
  8.       [HttpGet]
  9.       public IActionResult Get()
  10.       {
  11.           Person person = new()
  12.           {
  13.               FirstName = "John",
  14.               LastName = "Doe",
  15.               Age = 30
  16.           };
  17.           PersonRecord personRecord = _mapper.Map<PersonRecord>(person);
  18.           return Ok(personRecord);
  19.       }
  20.   }
复制代码
 
        通过上面的代码,我们就将Person对象映射成了PersonRecord对象。personRecord对象将具有与person相同的属性值。
        值得注意的是,由于record是不可变的,因此我们只能在创建时初始化其属性,无法在后续代码中修改属性值。因此,在映射过程中,Automapper会自动为record类型的目标对象生成一个构造函数,并根据源对象的属性值进行初始化。
        使用Automapper进行POCO到record的映射还可以处理复杂的场景,包括嵌套对象、集合类型等。只需在配置过程中定义适当的映射规则,Automapper会自动处理属性的映射。
        我们了解了使用Automapper将POCO映射成record的对象的步骤。首先,我们需要安装和配置Automapper,然后定义映射规则。最后,在需要进行映射的地方调用mapper.Map方法即可。这样,我们可以轻松地将POCO对象转换为不可变的record对象。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

雁过留声

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表