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.rhkb.cn/news/351136.html

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

相关文章

【Linux】 进程信号的发生

送给大家一句话&#xff1a; 何必向不值得的人证明什么&#xff0c;生活得更好&#xff0c;乃是为你自己。 -- 亦舒 进程信号的发生 1 何为信号2 信号概念的基础储备3 信号产生kill系统调用alarm系统调用异常core term Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢…

会声会影色彩校正在哪里 会声会影色彩素材栏在哪 会声会影中文免费版下载

会声会影是一款功能强大的视频编辑软件&#xff0c;它可以帮助用户轻松地编辑和制作视频。在进行视频编辑时&#xff0c;色彩校正是一个重要的步骤&#xff0c;它可以调整视频的色调、亮度和对比度等参数&#xff0c;使视频更加生动和鲜明。在会声会影中&#xff0c;色彩校正功…

linux 部署瑞数6实战(维普,药监局)第一部分

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx 本文章未经许可禁止转载&…

深入浅出談 隐马尔可夫的概念(2/ 2)-- 训练理论

文章目录 一、说明二、HMM 三大问题三、评估问题——前向-后向算法四、.解码问题——维特比算法五、学习问题——EM算法六、 连续隐马尔可夫 一、说明 在许多机器学习的章节中&#xff0c;常常遇见 HMM &#xff0c;往往看到它的数学式子后&#xff0c;就当没看到似的跳过去了…

【Python网络爬虫分步走】使用LXML解析网页数据

Python网络爬虫分步走 – 使用LXML解析网页数据 Web Scraping in Python - Using LXML to Parse Web Data By Jackson@ML Lxml作为Python的第三方库,提供易用的且功能强大的API,用来解析XML和HTML文档。事件驱动的API被用于分步骤解析。 本文简要介绍使用lxml库解析网页的基…

UML与设计模式

1、关联关系 关联关系用于描述不同类的对象之间的结构关系&#xff0c;它在一段时间内将多个类的实例连接在一起。关联关系是一种静态关系&#xff0c;通常与运行状态无关&#xff0c;而是由“常识”、“规则”、“法律”等因素决定的&#xff0c;因此关联关系是一种强关联的关…

北斗三代一体式数传终端短报文

北斗三代一体式数传终端短报文M20C-V30针对船载通信和导航应用推出的一款支持北斗 RDSS/RNSS 功能的船载一体机。北斗数传终端内部集成了北斗多频天线、射频、基带以及主控等功能单元&#xff0c;可实现 RDSS 定位、短报文通信和 RNSS 导航定位等功能。M20C-V30型北斗数传终端体…

牛客练习题打卡(06-15)

run方法线程执行体 .start方法开启多线程 在java中 &#xff0c; 整数类型默认int,带小数默认double ; 如果要指定长整型加L&#xff1b;如果要指定为单精度加F ; 在java中&#xff0c;重载要求方法名相同&#xff0c; 参数列表必须不同&#xff08;个数不同、或类型不同、参数…

Nginx+KeepAlived高可用负载均衡集群的部署

目录 一.KeepAlived补充知识 1.一个合格的群集应该具备的特点 2.健康检查&#xff08;探针&#xff09;常用的工作方式 3.相关面试问题 问题1 问题2 二.Keepealived脑裂现象 1.现象 2.原因 硬件原因 运用配置原因 3.解决 4.预防 方法1 方法2 方法3 方法4 三.…

WWDC 2024 回顾:Apple Intelligence 的发布与解析

一年一度的苹果全球开发者大会&#xff08;WWDC&#xff09;如期而至&#xff0c;2024 年的 WWDC 再次成为科技界的焦点。本次发布会中&#xff0c;苹果正式推出了他们在 AI 领域的全新战略——Apple Intelligence。这一全新概念旨在为用户打造“强大、易用、全面、个性化、注重…

DC/AC电源模块:为电动车充电基础设施提供高效能源转换

BOSHIDA DC/AC电源模块&#xff1a;为电动车充电基础设施提供高效能源转换 DC/AC电源模块是一种用于电动车充电基础设施的重要组件&#xff0c;它能够实现高效能源转换。在电动车的普及和推广过程中&#xff0c;DC/AC电源模块的重要性日益凸显。本文将从DC/AC电源模块的基本原…

CSS 实现个人资料卡

CSS 实现个人资料卡 效果展示 CSS 知识点 CSS 综合知识运用 页面整体布局 <div class"card"><div class"imgBox"><img src"./bg.jpg" /></div><div class"content"><div class"details&quo…

springboot+vue前后端分离项目中使用jwt实现登录认证

文章目录 一、后端代码1.响应工具类2.jwt工具类3.登录用户实体类4.登录接口5.测试接口6.过滤器7.启动类 二、前端代码1.登录页index 页面 三、效果展示 一、后端代码 1.响应工具类 package com.etime.util;import com.etime.vo.ResponseModel; import com.fasterxml.jackson.…

38、基于卷积神经网络(CNN)的车牌自动识别系统(matlab)

1、原理及流程 1&#xff09;原理 CNN&#xff08;卷积神经网络&#xff09;是一种深度学习模型&#xff0c;可以用于图像识别和分类任务。车牌自动识别系统的原理基本上就是使用CNN模型对车牌图像进行处理和识别。 首先&#xff1a;系统需要收集大量的含有车牌的图像数据作…

Vue2+Element-ui实现el-table表格自适应高度

效果图 新建指令 Vue.directive(height, {inserted(el, _binding, vnode) {const paginationRef vnode.context.$refs.paginationRefconst calculateHeight () > {const windowHeight window.innerHeightconst topOffset el.getBoundingClientRect().topconst otherEle…

Java 网站开发入门指南:如何用java写一个网站

Java 网站开发入门指南&#xff1a;如何用java写一个网站 Java 作为一门强大的编程语言&#xff0c;在网站开发领域也占据着重要地位。虽然现在 Python、JavaScript 等语言在网站开发中越来越流行&#xff0c;但 Java 凭借其稳定性、可扩展性和丰富的生态系统&#xff0c;仍然…

【SpringBoot】SpringBoot:构建实时聊天应用

文章目录 引言项目初始化添加依赖 配置WebSocket创建WebSocket配置类创建WebSocket处理器 创建前端页面创建聊天页面 测试与部署示例&#xff1a;编写单元测试 部署扩展功能用户身份验证消息持久化群组聊天 结论 引言 随着实时通信技术的快速发展&#xff0c;聊天应用在现代We…

redis aof写入以及aof重写的源码分析

这里写目录标题 版本aof的面试问题aof正常写入流程aof重写流程 版本 redis&#xff1a;6.2.7 aof的面试问题 最近找工作&#xff0c;面试被问倒了&#xff0c;记录一下 比如redis的aof指令会不会丢失&#xff1f;比如在重写aof的什么新来的操作怎么办&#xff1f; 在重写的…

【云计算】Docker部署Nextcloud网盘并实现随地公网远程访问

配置文件 切换root权限&#xff0c;新建一个nextcloud的文件夹&#xff0c;进入该目录&#xff0c;创建docker-compose.yml [cpslocalhost ~]$ su root Password: 666666 [rootlocalhost cps]# ls Desktop Documents Downloads Music Pictures Public Templates Vide…

【面经总结】Java集合 - Map

Map 概述 Map 架构 HashMap 要点 以 散列(哈希表) 方式存储键值对&#xff0c;访问速度快没有顺序性允许使用空值和空键有两个影响其性能的参数&#xff1a;初始容量和负载因子。 初始容量&#xff1a;哈希表创建时的容量负载因子&#xff1a;其容量自动扩容之前被允许的最大…