【C#】Mapster对象映射的使用

2023-11-10 08:29

本文主要是介绍【C#】Mapster对象映射的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系列文章

【C#】编号生成器(定义单号规则、固定字符、流水号、业务单号)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787

【C#】日期范围生成器(开始日期、结束日期)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129040663

【C#】组件化开发,调用dll组件方法
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129492112

【C#】数据实体类使用
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128816638

【C#】单据审批流方案
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128972545

【C#】条码管理操作手册
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126589496

【C#】IIS平台下,WebAPI发布及异常处理
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126539836

【C#】代码模板生成工具
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126890673

【C#】MySQL数据库导入工具(批量Excel插入)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126427323

【C#】简单二维码制作和打印工具
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126884228

【C#】最全单据打印(打印模板、条形码&二维码、字体样式、项目源码)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129415723

【C#】Windows服务(Service)安装及启停方案
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124053794

【C#】穿透Session隔离,服务调用外部程序(无窗体界面解决)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124053033

【C#】任务计划实现,使用Quartz类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/123667723

【C#】源码解析正则表达式
本文链接:https://blog.csdn.net/youcheng_ge/article/details/118337074

【C#】软件版本和文件MD5记录(XML操作)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/112513871

【C#】测试网络是否连通
本文链接:https://blog.csdn.net/youcheng_ge/article/details/110137288

【C#】根据名称获取编码(Dictionary获取key方法)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129816701

【C#】数据建模,你是使用DataTable还是List?
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129792726

【C#】GridControl控件和数据集双向绑定
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129423755

【C#】GridControl动态更换DataSource,数据查询异常处理
本文链接:https://blog.csdn.net/youcheng_ge/article/details/130305424

【C#】GridControl日期字段显示时分秒
本文链接:https://blog.csdn.net/youcheng_ge/article/details/130718303

【C#】GridControl增加选择列(不用二次点击)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/130763713

【C#】数据库检查工具(可跨库访问)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/97172329

【C#】代码解析–打印数据集
本文链接:https://blog.csdn.net/youcheng_ge/article/details/131431829

【C#】代码解析–截取整个方法函数
本文链接:https://blog.csdn.net/youcheng_ge/article/details/109817809

【C#】反射机制,动态加载类文件
本文链接:https://blog.csdn.net/youcheng_ge/article/details/131435110


文章目录

  • 系列文章
  • 前言
  • 一、问题描述
  • 二、解决方案
  • 三、软件开发(源码)
    • 3.1 引入开发包
    • 3.2 数据库实体类Entity
    • 3.3 数据传输对象Dto
    • 3.4 Dto到Entity映射
  • 四、项目展示
  • 五、资源链接


前言

我能抽象出整个世界,但是我不能抽象你。 想让你成为私有常量,这样外部函数就无法访问你。 又想让你成为全局常量,这样在我的整个生命周期都可以调用你。 可惜世上没有这样的常量,我也无法定义你,因为你在我心中是那么的具体。

哈喽大家好,本专栏为【项目实战】专栏,有别于【底层库】专栏,我们可以发现增加 了『问题描述』、『项目展示』章节,十分符合项目开发流程,让读者更加清楚项目解决的问题、以及产品能够达到的效果。本专栏收纳项目开发过程的解决方案,是我项目开发相对成熟、可靠方法的提炼,我将这些问题的解决思路梳理,撰写本文分享给大家,大家遇到类似问题,可按本文方案处理。

本专栏会持续更新,不断完善,专栏文章关联性较弱(文章之间依赖性较弱,没有阅读顺序)。大家有任何问题,可以私信我。如果您对本专栏感兴趣,欢迎关注吧,我将带你用最简洁的代码,实现复杂的功能。

·提示:本专栏为项目实战篇,未接触项目开发的同学可能理解困难,不推荐阅读。
3A0N000001


一、问题描述

Mapster对象映射的使用

二、解决方案

三、软件开发(源码)

3.1 引入开发包

Mapster

在这里插入图片描述

3.2 数据库实体类Entity

DBFirst 自动根据数据库表,生成数据库实体,或者使用我的 工具,一样可以生成类文件。

//------------------------------------------------------------------------------
//     Entity实体类,也称为DBModel。
//     此代码由工具自动生成,请勿手动创建。
//     如果重新生成代码,将覆盖手动添加内容。
//------------------------------------------------------------------------------using System.ComponentModel.DataAnnotations;
using System;
using System.Linq;
using System.Text;
using SqlSugar;namespace YS.Model
{///<summary>///基础信息///</summary>[SugarTable("裸砂原料信息表")]public class 裸砂原料信息表{public 裸砂原料信息表(){}/// <summary>/// 描述 :  /// 空值 : False/// 默认 : /// </summary>[Display(Name = "")][SugarColumn(IsPrimaryKey = true, IsIdentity = true)]public long AutoID { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 公司编号 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 四期/// </summary>[Display(Name = "")]public string 工厂名称 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 存货编码 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 采购订单编号 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 领用申请单编号 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 销售订单编号 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 供应商编号 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 裸砂原料类型 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 裸砂原料编号 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 砂规格 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 砂型号 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 状态描述 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 0.000/// </summary>[Display(Name = "")]public decimal? 当前数量 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 1000-01-01 00:00:00/// </summary>[Display(Name = "")]public DateTime? 打标时间 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 1000-01-01 00:00:00/// </summary>[Display(Name = "")]public DateTime? 打标录入时间 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 打标人编号 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 0.000/// </summary>[Display(Name = "")]public decimal? 打标数量 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 打标备注 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 否/// </summary>[Display(Name = "")]public string 是否隔离 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 1000-01-01 00:00:00/// </summary>[Display(Name = "")]public DateTime? 隔离时间 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 1000-01-01 00:00:00/// </summary>[Display(Name = "")]public DateTime? 隔离录入时间 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 隔离人编号 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 隔离原因 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 否/// </summary>[Display(Name = "")]public string 是否放行 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 1000-01-01 00:00:00/// </summary>[Display(Name = "")]public DateTime? 放行时间 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 1000-01-01 00:00:00/// </summary>[Display(Name = "")]public DateTime? 放行录入时间 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 放行人编号 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 放行原因 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 1000-01-01 00:00:00/// </summary>[Display(Name = "")]public DateTime? 检验合格时间 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 检验合格样品编号 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 0.000/// </summary>[Display(Name = "")]public decimal? 检验合格数量 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 1000-01-01 00:00:00/// </summary>[Display(Name = "")]public DateTime? 首次入库时间 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 生产领用/// </summary>[Display(Name = "")]public string 领用类型 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 1000-01-01 00:00:00/// </summary>[Display(Name = "")]public DateTime? 领用时间 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 1000-01-01 00:00:00/// </summary>[Display(Name = "")]public DateTime? 领用录入时间 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 领用人编号 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 领用备注 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 1000-01-01 00:00:00/// </summary>[Display(Name = "")]public DateTime? 退库时间 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 1000-01-01 00:00:00/// </summary>[Display(Name = "")]public DateTime? 退库录入时间 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 退库操作人编号 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 退库原因 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 退库备注 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 1000-01-01 00:00:00/// </summary>[Display(Name = "")]public DateTime? 采购退货时间 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 1000-01-01 00:00:00/// </summary>[Display(Name = "")]public DateTime? 采购退货录入时间 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 采购退货操作人编号 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 采购退货原因 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 采购退货备注 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 1000-01-01 00:00:00/// </summary>[Display(Name = "")]public DateTime? 报废时间 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 1000-01-01 00:00:00/// </summary>[Display(Name = "")]public DateTime? 报废录入时间 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 报废操作人编号 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 报废原因 { get; set; }/// <summary>/// 描述 :  /// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 报废备注 { get; set; }/// <summary>/// 描述 :  仓库编码/// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 仓库编码 { get; set; }/// <summary>/// 描述 :  货位编码/// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "")]public string 货位编码 { get; set; }}
}

3.3 数据传输对象Dto

创建数据传输对象,也就是前端给后台传输的数据实体,由用户自定义
我这里前端下拉选,有key值,需要传到后台构造 编号字段的,但是数据库存储,是存的名称,不需要参照显示哦。

集成自3.2的实体列,在此基础上略微增加几个字段

//------------------------------------------------------------------------------
//     Entity实体类,也称为DBModel。
//     此代码由工具自动生成,请勿手动创建。
//     如果重新生成代码,将覆盖手动添加内容。
//------------------------------------------------------------------------------using System.ComponentModel.DataAnnotations;
using System;
using System.Linq;
using System.Text;
using SqlSugar;namespace YS.Model
{///<summary>///基础信息///</summary>[SugarTable("裸砂原料信息表")]public class 裸砂原料信息表Dto : 裸砂原料信息表{/// <summary>/// 描述 :  裸砂原料类型编码/// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "裸砂原料类型编码")]public string 裸砂原料类型编码 { get; set; }/// <summary>/// 描述 :  砂规格编码/// 空值 : True/// 默认 : 砂规格编码/// </summary>[Display(Name = "砂规格编码")]public string 砂规格编码 { get; set; }/// <summary>/// 描述 :  砂型号编码/// 空值 : True/// 默认 : 空/// </summary>[Display(Name = "砂型号编码")]public string 砂型号编码 { get; set; }}
}

3.4 Dto到Entity映射

引入命名空间

using Mapster;

实体映射
Adapt 映射关键字

// DataTable转换为对象处理
var sqlSugar1 = new BaseService<裸砂原料信息表Dto>();
List<裸砂原料信息表Dto> list1 = sqlSugar1.Db.Utilities.DataTableToList<裸砂原料信息表Dto>(Dt_Info);// list就一条数据
裸砂原料信息表Dto 裸砂原料信息表Dto_Model = list1[0];string str_LastAutoCode = AutoCode(string.Format("Y{0}{1}0{2}{3}[3位流水号]",裸砂原料信息表Dto_Model.供应商编号,裸砂原料信息表Dto_Model.裸砂原料类型编码,裸砂原料信息表Dto_Model.砂规格编码,裸砂原料信息表Dto_Model.砂型号编码),"裸砂原料信息表", "裸砂原料编号");裸砂原料信息表Dto_Model.裸砂原料编号 = str_LastAutoCode;
裸砂原料信息表Dto_Model.状态描述 = 裸砂原料状态.等待裸砂原料样检验;
裸砂原料信息表Dto_Model.打标时间 = DateTimeNow;
裸砂原料信息表Dto_Model.打标录入时间 = DateTimeNow;
裸砂原料信息表Dto_Model.打标人编号 = UserID;// 做表映射,Dto->Entity
var info = 裸砂原料信息表Dto_Model.Adapt<裸砂原料信息表>();
var sqlSugar2 = new BaseService<裸砂原料信息表>();
sqlSugar2.Add(info);

有人可能问为什么有 DataTableToList()处理,我也没办法,接口中参数非要给我定义成 DataTable,我认为传输对象最好,直接定义成泛型,他们不听我的。
所以,数据后台处理我做了了转换,使用list处理。

四、项目展示

五、资源链接

这篇关于【C#】Mapster对象映射的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/381500

相关文章

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

Python使用python-can实现合并BLF文件

《Python使用python-can实现合并BLF文件》python-can库是Python生态中专注于CAN总线通信与数据处理的强大工具,本文将使用python-can为BLF文件合并提供高效灵活... 目录一、python-can 库:CAN 数据处理的利器二、BLF 文件合并核心代码解析1. 基础合

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注