首页 > 其他分享 >【愚公系列】2023年05月 .NET CORE工具案例-对象映射Master的使用

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

时间:2023-05-17 23:32:37浏览次数:57  
标签:CORE sourceObject Name 映射 05 XX Master using new

(文章目录)


前言

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

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

在这里插入图片描述

一、对象映射master的使用

1.安装包

Mapster

在这里插入图片描述

2.基本使用

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

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 普通做法

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 基本映射之映射到新对象

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 基本映射之映射到现有对象

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映射到新对象

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类

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 配置对象的映射关系

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、定义配置类

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、使用

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 使用映射配置的方式

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);

在这里插入图片描述

标签:CORE,sourceObject,Name,映射,05,XX,Master,using,new
From: https://blog.51cto.com/u_15437432/6294680

相关文章

  • 2023-05-17:一个正整数如果能被 a 或 b 整除,那么它是神奇的。 给定三个整数 n , a , b
    2023-05-17:一个正整数如果能被a或b整除,那么它是神奇的。给定三个整数n,a,b,返回第n个神奇的数字。因为答案可能很大,所以返回答案对10^9+7取模后的值。输入:n=4,a=2,b=3。输出:6。答案2023-05-17:过程描述:1.计算a和b的最小公倍数lcm。2.初始化......
  • 【hadoop】 3005-hadoop对象序列化编码
    一、hadoop序列化操作Writable接口,是根据 DataInput 和 DataOutput 实现的简单、有效的序列化对象MR的任意Key和Value必须实现Writable接口.MR的任意key必须实现WritableComparable接口二、自定义Writable,实现MapReduce程序1、需求内容日期 ......
  • 2023-05-17 刷题
    算法题目1:【Mid】47.全排列II思路分析:将原问题转换成子问题,先不考虑重复元素,例如P{1,2,3}={"1"+P{2,3},"2"+P{1,3},"3"+P{1,2}}。之后再考虑重复元素。怎么枚举?枚举每个位置可以填哪些数。【这种枚举方式能保证字典序,除此外,还有一种,枚举每个数可以放到哪个位置上,......
  • ASP.NET Core Swagger接入使用IdentityServer4 的 WebApi
    写在前面是这样的,我们现在接口使用了Ocelot做网关,Ocelot里面集成了基于IdentityServer4的开发的授权中心用于对Api资源的保护。问题来了,我们的Api用了SwaggerUI做接口的自文档,那就蛋疼了,你接入了IdentityServer4的Api,用SwaggerUI调试、调用接口的话,妥妥的401,未授权啊。那有小伙伴就......
  • Python基础05
    成员运算符查看某个个体是否在群体中关键字:in在 notin不在name=['kevin','jack','tank']print('kevin'inname)print('lili'notinname)身份运算符比较是否相等关键字:==比较的是值是否相等  is比较内存代码是否相等s1=['kevin','tank'......
  • Linux多进程05-exec函数族
    execl:执行文件函数#include<unistd.h>intexecl(constchar*pathname,constchar*arg,...); 执行参数path字符串所代表的文件路径参数:-path:需要指定的执行的文件的路径或者名称(推荐使用绝对路径)-arg:是执行可......
  • STM32F051 MK电调 BLDC 直流无刷电机控制 基于STM32F051 cortex-M0
    STM32F051MK电调BLDC直流无刷电机控制基于STM32F051cortex-M0的电调开发板,包含原理图PCB工程文件,程序源码,BLDC控制入门资料,供初学者入门学习了解。ID:48299619798638569......
  • .net core 自颁发ssl证书,及客户端证书验证
    .netcore自颁发ssl证书,及客户端证书验证openshell颁发证书:先下载openshell,下载地址:https://slproweb.com/products/Win32OpenSSL.htmlopensslgenrsa-outserver.key2048opensslx509-req-inserver.csr-outserver.crt-signkeyserver.key-days36500opensslpk......
  • 使用教程 | 基于TSMaster如何实现LIN RBS 剩余总线仿真
    本文导读RBS全称是:residualbussimulation,也就是所谓的剩余总线仿真。主要是基于车载网络数据库,如CAN/LIN/FlexRay/以太网数据库,仿真该网络内部各个节点的通讯行为。本文主要讲解TSMaster中LINRBS的操作流程。本文目录:一、硬件连接准备二、TSMaster软件LINRBS操作流程1.......
  • SSO2.0 6-20230516
                 ......