SqlSugar使用DbFirst对象根据数据库表结构创建实体类-C#

  • 本文所述开发环境:.C#、NET8、Visual Studio2022

1. 在项目中安装SqlSugar

  • 在Visual Studio2022中新建一个 C# 的控制台应用程序,框架选择 .Net8。新建后如下图所示:
    新建.Net8框架的C#控制台程序
  • 然后打开NuGet程序包管理器
    点击NuGet程序包管理器
  • 搜索 SqlSugarCore 并安装
    搜索SqlSugarCore并安装
  • 安装后在解决方案窗口中,项目下的包目录下就可以看到安装的包了
    在这里插入图片描述

2. 在数据库中创建以下表,后面案例中将要用到

  • 学生表
学生ID姓名班级ID状态ID性别年龄身高体重
101赵同学100112517065.3
102宋同学100212416555.3
103李同学100322717565.4
104钱同学1001228171.564.2
105周同学1002329169.866.7
106王同学1003329168.565.9
107谢同学1001125178.269.9
108郭同学1002125172.665.4
109郑同学1003124177.367.3
  • 班级表
班级ID班级名称班长班主任
1001奋进1001班107234
1002奋进1002班108325
1003奋进1003班109516
  • 状态表
状态ID状态名称
1本科在读
2博士在读
3硕士在读
  • 教师表
教师ID姓名性别联系方式
234任老师14523789834
325李老师16423264527
516武老师15537380412
  • 选课表
学生ID课程
101语文,数学,生物,地理,化学
102语文,数学,英语,物理,化学
103语文,数学,电路原理,地理,化学
104语文,数学,动画设计,C编程,化学
105语文,数学,C编程,历史,话剧鉴赏
106语文,数学,话剧鉴赏,动画设计,历史
107语文,数学,C编程,地理,化学
108语文,数学,电路原理,电路设计,历史
109语文,数学,电路设计,地理,化学

3. 使用SqlSugar.DbFirst创建实体类

更多操作可以查看SqlSugar官网,这里只介绍一些实际项目中用到的方法

a. 创建表对应的实体类文件

新建SqlSugar连接配置对象,官网给出如下设置:

using SqlSugar;var connectionConfig = new ConnectionConfig()
{ConnectionString = 你的ConnectionString  // 数据库连接字符串,DbType = SqlSugar.DbType.SqlServer, // 指定数据库类型IsAutoCloseConnection = true // 是否自动关闭连接
};

数据库连接字符串可以参照如下格式:
这里使用的数据库为本地SqlServer数据库,数据库名:FY2000,登录账户:sa,密码:123456

ConnectionString = “SERVER=127.0.0.1;DATABASE=FY2000;UID=sa;PWD=123456;MultipleActiveResultSets=true;trustServerCertificate=true;”

有了ConnectionConfig对象,就可以新建SqlSugarClient对象来根据数据库表结构创建对应的实体类文件到项目中。这样就不用手动新建实体类了,尤其在表字段很多的时候,可以减少工作量。

using (SqlSugarClient sugarClient = new(connectionConfig))
{sugarClient.DbFirst.Where("tb_student") // 要创建实体类文件的数据库表名.CreateClassFile(  // 创建实体类文件的方法"D:\\MyProTest\\CSharp\\SqlSugarConsole\\SugarModels", // 创建的实体类文件的存放路径"SugarModels"); //指定实体类所属的命名空间
}

编译运行控制台程序,结果如下:
生成实体类文件
可以看到,运行后自动在项目路径下创建了SugarModels文件夹,并创建了用表名命名的实体类文件tb_student.cs
tb_student.cs文件内容如下:

using System;
using System.Linq;
using System.Text;namespace SugarModels
{///<summary>//////</summary>public partial class tb_student{public tb_student(){}/// <summary>/// Desc:/// Default:/// Nullable:False/// </summary>           public int 学生ID {get;set;}/// <summary>/// Desc:/// Default:/// Nullable:False/// </summary>           public string 姓名 {get;set;}/// <summary>/// Desc:/// Default:/// Nullable:False/// </summary>           public int 班级ID {get;set;}/// <summary>/// Desc:/// Default:/// Nullable:False/// </summary>           public int 状态ID {get;set;}/// <summary>/// Desc:/// Default:/// Nullable:True/// </summary>           public string 性别 {get;set;}/// <summary>/// Desc:/// Default:/// Nullable:True/// </summary>           public int? 年龄 {get;set;}/// <summary>/// Desc:/// Default:/// Nullable:True/// </summary>           public double? 身高 {get;set;}/// <summary>/// Desc:/// Default:/// Nullable:True/// </summary>           public double? 体重 {get;set;}}
}

可以看到 命名空间名称为 SugarModels,类名为表名 tb_student

如果想要创建字段的属性标签,比如:主键属性,此时就要用方法:IsCreateAttribute(),代码如下:

    sugarClient.DbFirst.Where("tb_teacher") // 要创建实体类文件的数据库表名.IsCreateAttribute() // 生成SqlSugar特性.CreateClassFile(  // 创建实体类文件的方法"D:\\MyProTest\\CSharp\\SqlSugarConsole\\SugarModels", // 创建的实体类文件的存放路径"SugarModels"); //指定实体类所属的命名空间

运行后,类 tb_student中的学生ID字段加上了主键的属性( [SugarColumn(IsPrimaryKey=true)]),类名上面也加上了对应数据库表名的属性([SugarTable(“tb_student”)])。如下所示:

namespace SugarModels
{///<summary>//////</summary>[SugarTable("tb_student")]public partial class tb_student{public tb_student(){}/// <summary>/// Desc:/// Default:/// Nullable:False/// </summary>           [SugarColumn(IsPrimaryKey=true)]public int 学生ID {get;set;}=======其它字段没有变化,此处省略========           }
}

如果类中的string类型的字段存在为NULL的情况,那我们就应该声明为可以为NULL的类型string?,这时候就要使用方法:StringNullable()。,代码如下:

    sugarClient.DbFirst.Where("tb_student") // 要创建实体类文件的数据库表名.IsCreateAttribute() // 生成SqlSugar特性.StringNullable()  // 强制可空类型string加上?.CreateClassFile(  // 创建实体类文件的方法"D:\\MyProTest\\CSharp\\SqlSugarConsole\\SugarModels", // 创建的实体类文件的存放路径"SugarModels"); //指定实体类所属的命名空间

执行结果如下所示:字段 姓名性别 都有了相应的变化

[SugarTable("tb_student")]
public partial class tb_student
{public tb_student(){}/// <summary>/// Desc:/// Default:/// Nullable:False/// </summary>           public string 姓名 {get;set;} = null!;/// <summary>/// Desc:/// Default:/// Nullable:True/// </summary>           public string? 性别 {get;set;}=======其它字段没有变化,此处省略========  
}

有时候,表名可能太长或不够好,不是想要的类名,想要根据表结构创建自定义名字的实体类名,这时候就要用方法:FormatClassName()。代码如下:

    sugarClient.DbFirst.Where("tb_student") // 要创建实体类文件的数据库表名.IsCreateAttribute() // 生成SqlSugar特性.StringNullable()  // 强制可空类型string加上?.FormatClassName(it => "Student") // 指定创建的实体类文件名称和类名称.CreateClassFile(  // 创建实体类文件的方法"D:\\MyProTest\\CSharp\\SqlSugarConsole\\SugarModels", // 创建的实体类文件的存放路径"SugarModels"); //指定实体类所属的命名空间

执行结果如下:
生成指定名称的实体类名文件
生成的类名如下:

namespace SugarModels
{///<summary>//////</summary>[SugarTable("tb_student")]public partial class Student{public Student(){}=======其它字段没有变化,此处省略========  }
}

以上就是实际使用过程中用到的一些创建实体类的方法。


好了,分享到这里,感谢翻阅,希望帮到你。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/27022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音乐界的ChatGPT!Suno V3震撼发布,AI创作的新纪元开启!

AI音乐革命的背景与意义 在数字化的浪潮中&#xff0c;音乐产业正经历着前所未有的变革。随着人工智能技术的不断进步&#xff0c;AI不仅改变了我们消费音乐的方式&#xff0c;更开始重塑音乐的创作过程。Suno V3&#xff0c;这个由Suno AI公司推出的音乐生成模型&#xff0c;…

【等保资料】等级保护定级指南及网络安全解读(ppt原件)

新版网络安全等级保护定级指南网络安全等级保护工作的作用对象&#xff0c;主要包括基础信息网络、工业控制系统、云计算平台、物联网、使用移动互联技术的网络和大数据等。 软件全套精华资料包清单部分文件列表&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xf…

Linux网络-HttpServer的实现

文章目录 前言一、请求报文的解析URL的解析 二、响应报文的发送Content-LenthConten-TypeCookie和Set-CookieCookie的风险 三、尝试发送一个HTML网页404网页Location 重定向 四、浏览器的多次请求行为总结 前言 之前我们简单理解了一下Http协议&#xff0c;本章我们将在LInux下…

WPF视频学习-简单应用篇图书馆程序(一)

1.登录界面和主界面跳转 先把登录界面分为三行《Grid》 先添加两行&#xff1a; <Grid><!--//分三行&#xff0c;行排列--><Grid.RowDefinitions><RowDefinition Height"auto"/><RowDefinition Height"auto"/><RowDef…

Spring Boot集成antlr实现词法和语法分析

1.什么是antlr&#xff1f; Antlr4 是一款强大的语法生成器工具&#xff0c;可用于读取、处理、执行和翻译结构化的文本或二进制文件。基本上是当前 Java 语言中使用最为广泛的语法生成器工具。Twitter搜索使用ANTLR进行语法分析&#xff0c;每天处理超过20亿次查询&#xff1…

【第四篇】SpringSecurity的HttpSecurity详解

SpringSecurity的XML文件配置 在配置文件中通过 security:http 等标签来定义了认证需要的相关信息 SpringSecurity的HttpSecurity配置 在SpringBoot项目中,脱离了xml配置文件的方式,在SpringSecurity中提供了HttpSecurity等工具类,这里HttpSecurity就等同于在配置文件中定…

PS的抠图算法原理剖析 2

记得还有个这种抠图方式 我们尝试理解一下 第一步&#xff0c;人工选取点位&#xff0c;然后其实构造了一个凸多边形&#xff0c;这一步还行&#xff0c;中间有洞就挖洞&#xff0c;类似earcut那种东西 第二步&#xff0c;2个点中间的连线部分&#xff0c;怎么包裹到轮廓的&a…

单调队列——Acwing.154滑动窗口

单调队列 定义 单调队列是一个限制只能队尾插入&#xff0c;但是可以两端删除的双端队列。单调队列存储的元素值&#xff0c;是从队首到队尾单调递增或单调递减的。 运用情况 滑动窗口最大值&#xff1a;给定一个整数数组和一个窗口大小&#xff0c;计算窗口内的最大值。任…

深入解析MySQL的层次化设计

一、基础架构 1.连接器 1.会先连接到这个数据库上&#xff0c;这时候接待你的就是连接器。连接器负责跟客户端建立连接、获取权限、维持和管理连接 2.用户密码连接成功之后&#xff0c;会从权限表中拿出你的权限&#xff0c;后续操作权限都依赖于此时拿出的权限,这就意味着当链…

达梦导入导出

针对导出数据库表结构通常有 3 种方法&#xff1a; 使用 DTS 导出 打开 DTS 迁移工具&#xff0c;选择【DM-->SQL】并链接到数据库中&#xff0c;如下图所示&#xff1a; 添加定义脚本&#xff0c;并选择【迁移范围】&#xff08;仅迁移对象定义&#xff09;&#xff0c;如…

不愧是字节,图像算法面试真细致

这本面试宝典是一份专为大四、研三春招和研二暑假实习生准备的珍贵资料。 涵盖了图像算法领域的核心知识和常见面试题&#xff0c;包括卷积神经网络、实例分割算法、目标检测、图像处理等多个方面。不论你是初学者还是有经验的老手&#xff0c;都能从中找到实用的内容。 通过…

内存卡提示需要格式化?别急,这样拯救你的数据

一、内存卡突然提示需要格式化 在日常生活中&#xff0c;我们经常会使用到内存卡来存储照片、视频、文档等重要数据。然而&#xff0c;有时当我们试图访问内存卡时&#xff0c;却会遭遇一个令人头疼的问题——系统突然提示“内存卡需要格式化”。这意味着我们无法直接读取或写…

如何利用AI绘图,生成同一人物(最好为二次元)的不同动作和不同表情的图片?

Ai绘画有一个很现实的问题&#xff0c;要保证每次画出的都是同一个人物的话&#xff0c;很费劲。 Midjourney就不必说了&#xff0c;人物的高度一致性一直得不到很好的解决。而在Stable Diffusion&#xff08;SD&#xff09;中&#xff0c;常用办法是通过同一个Seed值&#xf…

汇凯金业:黄金期货交易时间规则

黄金期货交易时间规则因交易所不同而有所差异。以下是几个主要交易所的黄金期货交易时间及其相关规则&#xff1a; 一、纽约商品交易所(COMEX) 纽约商品交易所(COMEX)是全球最大的黄金期货交易市场之一&#xff0c;其黄金期货交易时间如下&#xff1a; 电子交易时间(通过CME…

黑苹果睡眠总是自动唤醒(RTC)

黑苹果睡眠总是自动唤醒【RTC】 1. 问题2. 解决方案2.1. 查看重启日志2.2. 配置Disable RTC wake scheduling补丁 3. 后续4. 参考 1. 问题 黑苹果EFI 更换后&#xff0c;总是在手动 睡眠后&#xff0c;间歇性重启&#xff0c;然后再次睡眠&#xff0c;然后再重启。原因归结为&…

【RAG】RAG性能提升之路-RAPTOR:一种构建递归文档树的增强检索方法

背景 检索增强型语言模型&#xff08;RALMs&#xff09;在处理需要不断更新的知识和大量信息的文档时确实展现出了优势。然而&#xff0c;现有的方法在处理长篇文档时存在局限性&#xff0c;主要是因为它们通常只能检索较短的文本片段&#xff0c;这限制了对整体文档上下文的全…

C# WPF入门学习主线篇(二十八)—— 使用集合(ObservableCollection)

C# WPF入门学习主线篇&#xff08;二十八&#xff09;—— 使用集合&#xff08;ObservableCollection&#xff09; 在WPF中&#xff0c;数据绑定是构建动态和响应式用户界面的关键。ObservableCollection是一个特别有用的集合类型&#xff0c;它不仅支持数据绑定&#xff0c;还…

同三维T80005EHS-4K60 4K60 HDMI/SDI编码器

1路4K60 HDMI或12G SDI输入&#xff0c;2路3.5MM音频输入&#xff0c;对应HDMI或SDI&#xff0c;1个USB口和1个SD卡槽&#xff0c;可录像到U盘/移动硬盘/SSD硬盘/TF卡 产品简介&#xff1a; 同三维T80005EHS-4K60 4K60HDMI/SDI H.265编码器采用最新高效H.265高清数字视频压缩…

解答 | 有免费的IP地址证书吗

在当今网络安全至关重要的时代&#xff0c;SSL/TLS证书已成为保障数据传输安全的基础。这些证书确保了客户端与服务器之间通信的加密&#xff0c;防止数据被窃取或篡改。尽管如此&#xff0c;当涉及到为IP地址而非域名颁发证书时&#xff0c;情况就变得复杂了。不同于域名验证证…

opencv roi改进版

点击鼠标左键开始画roi,右键或者回车代表画框完毕 并且做了封装。 import cv2 import numpy as npclass ROIDrawer:def __init__(self, image_o):self.drawing = Falseself.ix, self.iy = -1, -1self.roi = Noneself.image_o =image_oself.image = self.image_o.copy()self.…