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

Vue前端服务是什么:深入解析与实际应用

Vue前端服务是什么&#xff1a;深入解析与实际应用 在现今的互联网开发领域&#xff0c;前端技术日新月异&#xff0c;Vue.js作为其中的佼佼者&#xff0c;其前端服务更是成为了众多开发者关注的焦点。那么&#xff0c;Vue前端服务究竟是什么&#xff1f;它有哪些核心要素和实…

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

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

模拟面试题卷二

1. 什么是JavaEE框架&#xff0c;你能列举一些常用的JavaEE框架吗&#xff1f; 答&#xff1a;JavaEE框架是一套用于开发企业级应用的技术规范和工具集合。常用的JavaEE框架有Spring、Hibernate、Struts、JSF等。 2. 请解释一下面向对象技术和设计原则是什么&#xff0c;你能…

VR编程零基础好学吗?深入解析四个维度、五大要素、六大技巧与七大挑战

VR编程零基础好学吗&#xff1f;深入解析四个维度、五大要素、六大技巧与七大挑战 在科技飞速发展的今天&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已逐渐渗透到我们生活的方方面面。对于许多零基础的学习者来说&#xff0c;VR编程是否好学成为了他们心中的疑问。本…

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…

原子性,一致性,隔离性,持久性

原子性&#xff08;Atomicity&#xff09;&#xff1a;一个事务中的所有操作&#xff0c;要么全部完成&#xff0c;要么全部不完成&#xff0c;不会结束在中间某个环节&#xff0c;而且事务在执行过程中发生错误&#xff0c;会被回滚到事务开始前的状态&#xff0c;就像这个事务…

【区分vue2和vue3下的element UI Form 表单组件,分别详细介绍属性,事件,方法如何使用,并举例】

在Vue 2中&#xff0c;我们通常使用Element UI的表单组件&#xff0c;而在Vue 3中&#xff0c;由于Element UI本身并未直接支持Vue 3&#xff0c;我们通常会使用Element Plus作为替代&#xff0c;它是Element UI的Vue 3版本。下面我将分别介绍Vue 2下Element UI Form和Vue 3下E…

【第四篇】SpringSecurity的HttpSecurity详解

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

Google Test简介

1. 引言 在软件开发过程中&#xff0c;测试是保证代码质量和可靠性的关键环节。Google Test&#xff08;gtest&#xff09;是一个由Google开发的C测试框架&#xff0c;它提供了一套丰富的测试功能&#xff0c;帮助开发者编写和维护高质量的代码。 2. Google Test 基础 2.1 G…

2024年护网行动全国各地面试题汇总(4)作者:————LJS

面试过程及回答 自我介绍这里就如实回答的工作经历&#xff0c;参与的项目&#xff0c;尽量简短的把你参与的项目和成果说出来就行 使用过哪些设备&#xff0c;出现误报怎么办 天眼、EDR、全流量告警、态势感知、APT、蜜罐设备先去查看设备的完整流量日志等信息确认是否为误报&…

PS的抠图算法原理剖析 2

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

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

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

idea 新建一个 JSP(JavaServer Pages)项目

环境设置&#xff1a; 确保你的开发环境中已经安装了 Java 开发工具包&#xff08;JDK&#xff09;和一个 Java Web 开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;比如 Eclipse、IntelliJ IDEA 或者 NetBeans。你还需要一个 Web 服务器&#xff0c;比如 Apache T…

深入解析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;却会遭遇一个令人头疼的问题——系统突然提示“内存卡需要格式化”。这意味着我们无法直接读取或写…