八、对象映射指南

将一个对象的值批量映射到另一个对象中,支持自定义映射规则。

传统模式(不推荐)

假设有两个类型:StudentStudentDto,现在需要将 Student 对象赋值给 StudentDto

Student

public class Student
{
    public string FirstName {get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
    public string Address { get; set; }
    public string Gender {get; set; }
}

StudentDto

public class StudentDto
{
    public string FullName {get; set; }
    public int Age { get; set; }
    public string Gender {get; set; }
}

传统赋值模式代码如下:

通过上面的代码,可能一部分读者觉的这是一件很正常的代码,没有什么不妥。

确实,这样的代码咋看没什么不妥,但是有几个漏洞

  1. 如果字段繁多,这赋值操作相当耗时间且容易出错

  2. 如果多次需要将 Student映射到 StudentDto中,则这样的代码散落在很大地方,给维护带来了极大的困扰

  3. 这样的赋值操作实际上污染了业务逻辑代码,不利于后续的统一管理

  4. 这样的赋值操作实在是多,无意增加了项目包的大小,开发效率也会低下

所以,我们迫切需要一种更加灵活、简易的对象赋值(映射)方式。

对象映射组件(推荐)

正是由于传统组件带来的漏洞及效率低下问题,所以就有第三方开发者提供了解决方案,在众多的解决方案中,无外乎 AutoMapperMapster 最为出色。

由于 Mapster 简单易用,而且性能极高,所以 Hoa Framework 将 Mapster 作为默认的映射组件。

Mapster 使用

简单使用

将源对象映射到目标对象,并创建新的目标对象

将源对隐射到已存在的目标对象

自定义映射规则

通常,我们的属性并非总是一一对应映射,我们可能会进行一些操作或重写,比如:StudentDto.FullNameStudent.FirstName + Student.LastName 组成。

自定义映射支持多种方式,在 Hoa Framework 中,建议程序员将 自定义映射规则配置在 Hoa.Application.ManualMapper.cs中,方便集中管理。

更多自定义映射规则可查看官方文档

特殊映射

Hoa Framework 内置了将类似 GROUP_ID->GroupIdGroupId->GROUP_ID两种映射方式,这是 Mapster 默认不具备的功能。

配置Hoa.Application.ManualMapper.cs如下:

数据库实体映射说明

将 EF Core 查询的结果集映射到 Dto 中。

🏴 传统模式(不推荐):

🏴 使用 Mapster 之后(推荐):

Dto 映射到已存在的 Entity

注意 如果 Dto 中某些值为 Null,默认也会将 Null值更新到 Entity这可能不是我们想要的!!!所以,我们需要手动配置一下,Null 值不需要映射。

更多 Mapster 可查看官方文档

最后更新于

这有帮助吗?