前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2023年02月 .NET CORE工具案例-对象映射Master的使用

【愚公系列】2023年02月 .NET CORE工具案例-对象映射Master的使用

作者头像
愚公搬代码
发布2023-03-16 17:17:21
4590
发布2023-03-16 17:17:21
举报
文章被收录于专栏:历史专栏历史专栏

文章目录


前言

对象映射框架Master可以帮助开发人员将对象映射到数据库,以进行数据持久化。它还可以支持ORM(对象关系映射),以及其他数据库技术,比如存储过程。它可以帮助开发人员更快、更有效地完成数据库操作。

Master官网:https://github.com/MapsterMapper/Mapster

在这里插入图片描述
在这里插入图片描述

一、对象映射master的使用

1.安装包

代码语言:javascript
复制
Mapster
在这里插入图片描述
在这里插入图片描述

2.基本使用

先定义两个一样的类sourceObject和DestObjectTest

代码语言:javascript
复制
public class SourceObjectTest
{
    public string Name { get; set; }
    public string Sex { get; set; }
    public string Address { get; set; }
    public List<int> Age { get; set; }
}
在这里插入图片描述
在这里插入图片描述

2.1 普通做法

代码语言:javascript
复制
using ConsoleTest;
using Mapster;

SourceObjectTest sourceObject = new SourceObjectTest();
sourceObject.Name = "愚公";
sourceObject.Age = new List<int> { 20, 13, 26 };
sourceObject.Address = "福建省XX市XX县";
sourceObject.Sex = "男";

//-------------------------------------------------普通做法-----------------------------------------------
DestObjectTest destObject = new DestObjectTest();
destObject.Name = sourceObject.Name;
destObject.Sex = sourceObject.Sex;
destObject.Address = sourceObject.Address;
destObject.Age = sourceObject.Age;
在这里插入图片描述
在这里插入图片描述

2.2 基本映射之映射到新对象

代码语言:javascript
复制
using ConsoleTest;
using Mapster;

SourceObjectTest sourceObject = new SourceObjectTest();
sourceObject.Name = "愚公";
sourceObject.Age = new List<int> { 20, 13, 26 };
sourceObject.Address = "福建省XX市XX县";
sourceObject.Sex = "男";

//-------------------------------------------------基本映射之映射到新对象-----------------------------------------------

DestObjectTest destObject1 = sourceObject.Adapt<DestObjectTest>();
在这里插入图片描述
在这里插入图片描述

2.3 基本映射之映射到现有对象

代码语言:javascript
复制
using ConsoleTest;
using Mapster;

SourceObjectTest sourceObject = new SourceObjectTest();
sourceObject.Name = "愚公";
sourceObject.Age = new List<int> { 20, 13, 26 };
sourceObject.Address = "福建省XX市XX县";
sourceObject.Sex = "男";


//-------------------------------------------------基本映射之映射到现有对象-----------------------------------------------

DestObjectTest destObject = new DestObjectTest();
destObject.Name = "李四";
destObject.Age = new List<int> { 20 };
destObject.Address = "中国XX省XX市XX县";
destObject.Sex = "女";
destObject = sourceObject.Adapt(destObject);
在这里插入图片描述
在这里插入图片描述

2.4 IQueryable映射到新对象

代码语言:javascript
复制
using (MyDbContext context = new MyDbContext())
{
    // 使用 ProjectToType 映射到目标类型
    var destinations = context.Sources.ProjectToType<Destination>().ToList();

    // 手动编写映射
    var destinations = context.Sources.Select(c => new Destination {
        Id = p.Id,
        Name = p.Name,
        Surname = p.Surname,
        ....
    })
    .ToList();
}

这个就不做多说了主要是数据库查询出来的数据直接映射到新对象

3.自定义映射

当我们的映射对象的属性与源对象的属性不一致时我们就可以使用映射器。映射器的主要作用就是使得SourceObjectTest的name属性和DifferentDestObjectTest的UserName是一个意思,只是创建Model类的时候取得名字不一样,实现不一样名称的映射。

定义DifferentDestObjectTest类

代码语言:javascript
复制
public class DifferentDestObjectTest
{
    public string UserName { get; set; }
    public string Sex { get; set; }
    public string Address { get; set; }
    public List<int> Age { get; set; }
}

3.1 直接在 TypeAdapterConfig 配置对象的映射关系

代码语言:javascript
复制
using ConsoleTest;
using Mapster;
using MapsterMapper;

SourceObjectTest sourceObject = new SourceObjectTest();
sourceObject.Name = "愚公";
sourceObject.Age = new List<int> { 20, 13, 26 };
sourceObject.Address = "福建省XX市XX县";
sourceObject.Sex = "男";


//-------------------------------------------------TypeAdapterConfig-----------------------------------------------

var config = new TypeAdapterConfig();
config.ForType<SourceObjectTest, DifferentDestObjectTest>()
            .Map(dest => dest.UserName, src => src.Name)
            .Map(dest => dest.Address, src => src.Name + src.Address);
var mapper = new Mapper(config);

DifferentDestObjectTest differentDestObjectTest = mapper.Map<DifferentDestObjectTest>(sourceObject);
在这里插入图片描述
在这里插入图片描述

3.2 使用接口的方式

1、定义配置类

代码语言:javascript
复制
public class DifferentDestObjectTestRegister : IRegister
{
    public void Register(TypeAdapterConfig config)
    {
        config.ForType<SourceObjectTest, DifferentDestObjectTest>()
      .Map(dest => dest.UserName, src => src.Name)
      .Map(dest => dest.Address, src => src.Name + src.Address);
    }
}
在这里插入图片描述
在这里插入图片描述

2、使用

代码语言:javascript
复制
using ConsoleTest;
using Mapster;
using MapsterMapper;
using System.Reflection;

SourceObjectTest sourceObject = new SourceObjectTest();
sourceObject.Name = "愚公";
sourceObject.Age = new List<int> { 20, 13, 26 };
sourceObject.Address = "福建省XX市XX县";
sourceObject.Sex = "男";


//-------------------------------------------------TypeAdapterConfig-----------------------------------------------

var config = new TypeAdapterConfig();
config.Scan(Assembly.GetExecutingAssembly());
var mapper = new Mapper(config);
DifferentDestObjectTest differentDestObjectTest = mapper.Map<DifferentDestObjectTest>(sourceObject);
在这里插入图片描述
在这里插入图片描述

3.2 使用映射配置的方式

代码语言:javascript
复制
using ConsoleTest;
using Mapster;
using MapsterMapper;
using System.Reflection;

SourceObjectTest sourceObject = new SourceObjectTest();
sourceObject.Name = "愚公";
sourceObject.Age = new List<int> { 20, 13, 26 };
sourceObject.Address = "福建省XX市XX县";
sourceObject.Sex = "男";


//-------------------------------------------------映射配置-----------------------------------------------

TypeAdapterConfig<SourceObjectTest, DifferentDestObjectTest>
              .NewConfig()
              .Map(dest => dest.UserName,
                  src => src.Name);

DifferentDestObjectTest differentDestObjectTest = TypeAdapter
.Adapt<SourceObjectTest, DifferentDestObjectTest>(sourceObject);
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023/02/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 前言
  • 一、对象映射master的使用
    • 1.安装包
      • 2.基本使用
        • 2.1 普通做法
        • 2.2 基本映射之映射到新对象
        • 2.3 基本映射之映射到现有对象
        • 2.4 IQueryable映射到新对象
      • 3.自定义映射
        • 3.1 直接在 TypeAdapterConfig 配置对象的映射关系
        • 3.2 使用接口的方式
        • 3.2 使用映射配置的方式
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档