Skip to content

对象关系映射

将一个对象的值批量映射到另一个对象中,支持自定义映射规则。对象映射可以简化代码、提高维护性,并且减少业务逻辑中的冗余操作。


传统模式

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

示例代码

csharp
var student = new Student() 
{
    Name = "Malus", 
    Age = 27,
    Address = "上海市闵行区",
    Gender = "男"
};

// 赋值
var studentDto = new StudentDto()
{
    FullName = student.FirstName + student.LastName,
    Age = student.Age,
    Gender = student.Gender
};

存在的问题

  1. 字段繁多:赋值操作耗时且容易出错。
  2. 代码分散:多次映射操作散落在不同地方,维护困难。
  3. 污染业务逻辑:赋值操作混入业务逻辑,不利于统一管理。
  4. 代码冗余:增加项目包大小,降低开发效率。

因此,我们需要一种更加灵活、简易的对象映射方式。


对象映射组件 - Mapster

推荐使用 Mapster,它性能优于 AutoMapper,简单易用且性能极高。

安装

shell
dotnet add package Mapster

基本用法

Mapster 默认根据字段名称进行匹配,无需额外配置。配置会在第一次调用时被缓存,后续调用会从缓存中获取,从而提升性能。

csharp
// 映射为新对象
var user = new User();
var dto = user.Adapt<UserDto>();

// 在目标对象的基础上进行映射
user.Adapt(dto);

// 注意:Adapt 扩展方法使用的配置为 TypeAdapterConfig.GlobalSettings

自定义映射规则

如果需要配置映射规则,可以在 TypeAdapterConfig.GlobalSettings 中进行配置。

更多配置细节,可以参考以下资源:


总结

  • 传统模式:手动赋值,代码冗余且维护困难。
  • Mapster:自动映射,支持自定义规则,性能优异。

通过使用 Mapster,可以显著简化对象映射操作,提高代码质量和开发效率。

最近更新