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.mfbz.cn/a/704418.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

资源分享—2021版市级制图规范符号库

汇总整理超图平台软件相关的各类资源&#xff08;包括但不限于符号库、地图模板、地理处理模型等&#xff09;&#xff0c;助力项目的高效制图、提高数据生产效率等业务。 本次分享新版国土空间规划【2021版市级制图规范符号库】&#xff0c;提供SuperMap格式符号库下载。 1.市…

数据结构的队列,链表,栈的基础操作

1&#xff1a;队列 #include <stdio.h>#include <stdlib.h>#include "./02队列.h"/** function: 创建一个空的队列* param [ in] * param [out] * return */Sequeue* xinduilie(){Sequeue* sq (Sequeue*)malloc(sizeof(Sequeue)); if(N…

Java 反射机制 -- Java 语言反射的概述、核心类与高级应用

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 010 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自…

镜像拉取失败:[ERROR] Failed to pull docker image

问题描述 执行 bash docker/scripts/dev_start.sh 命令提示错误&#xff1a; permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post “http://%2Fvar%2Frun%2Fdocker.sock/v1.45/images/create?fromImageregistry.b…

在Lua解释器中注册自定义函数

本文目录 1、引言2、函数注册2.1注册原理 2.2 注册函数 3、实操3.1 编写注册函数3.2编写测试代码 4、结论 文章对应视频教程&#xff1a; 暂无&#xff0c;可以关注我的B站账号等待更新。 点击图片或链接访问我的B站主页~~~ 1、引言 在之前的博客中&#xff0c;已经介绍了如何…

JAVA小知识17:数组,从0基础到掌握

数组&#xff0c;无论在哪种编程语言当中都是最基础&#xff0c;最广泛使用的一种线性表数据结构&#xff0c;这篇文章将从多个角度来从浅入深的讲述数组。 本文讲述了数组的概念&#xff0c;定义&#xff0c;初始化方法以及如何遍历数组&#xff0c;如何赋值&#xff0c;关于数…

4. Revit API UI 之 Ribbon(界面)

4. Revit API UI 之 Ribbon&#xff08;界面&#xff09; 第二篇中&#xff0c;我们提到了IExternalApplication&#xff0c;该接口需要实现两个方法&#xff1a;Revit启动时调用的OnStartup 方法&#xff0c;和Revit关闭时调研的OnShutdown 方法。文中还给了个例子&#xff0…

剧透!「飞凌嵌入式技术创新日」3大亮点抢先看

6月25日&#xff0c;飞凌嵌入式技术创新日&#xff08;北京站&#xff09;即将开幕&#xff0c;一场嵌入式前沿科技的高端局就在眼前。 飞凌嵌入式作为国内较早专业从事嵌入式技术的企业&#xff0c;凭借18年的行业深耕和丰富的技术积累&#xff0c;已在业界赢得了广泛的影响力…

LabVIEW电源适应能力检测系统

随着工业自动化程度的提高&#xff0c;电源质量直接影响设备的稳定运行。利用LabVIEW开发一个单相电源适应能力检测系统&#xff0c;该系统通过智能化和自动化测试&#xff0c;提高了测试效率&#xff0c;减少了人为错误&#xff0c;保证了电源质量的可靠性。 项目背景 在现代…

大厂面试必备:如何轻松实现分布式Session管理?

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!​​​​​​​ 大家好,我是小米,一个29岁的技术爱好者,喜欢分享各种技术干货。今天我们来聊一聊阿里巴巴面试中的一个经典问题:如何实现分布式Sess…

HCIA12 NAT网络地址转换实验

NAT&#xff08;Network Address Translation&#xff09;是将 IP 报头中的 IP 地址转换为另一个 IP 地址的过程。主要俩好处&#xff1a; • 有效避免来自外网的攻击&#xff0c;可以很大程度上提高网络安全性。 • 控制内网主机访问外网&#xff0c;同时也可以控制外网…

你的医书是假的!批评《DDD诊所——聚合过大综合症》(合集)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 &#xff08;《你的医书是假的&#xff01;》原文写于2023年8月&#xff0c;以系列文章方式发表&#xff0c;现合并成一篇文章&#xff09; 一、说在前面 这两天在“ Thoughtworks洞见…

Mac vscode could not import github.com/gin-gonic/gin

问题背景&#xff1a; 第一次导入一个go的项目就报红 问题分析&#xff1a; 其实就是之前没有下载和导入gin这个web框架包 gin是一个golang的微框架&#xff0c;封装比较优雅&#xff0c;API友好&#xff0c;源码注释比较明确。 问题解决&#xff1a; 依次输入以下命令。通…

【STM32】输入捕获应用-测量脉宽或者频率(方法1)

图1 脉宽/频率测量示意图 1 测量频率 当捕获通道TIx 上出现上升沿时&#xff0c;发生第一次捕获&#xff0c;计数器CNT 的值会被锁存到捕获寄存器CCR中&#xff0c;而且还会进入捕获中断&#xff0c;在中断服务程序中记录一次捕获&#xff08;可以用一个标志变量来记录&#…

阿里最强开源大模型本地部署、API调用和WebUI对话机器人

阿里巴巴通义千问团队发布了Qwen2系列开源模型&#xff0c;该系列模型包括5个尺寸的预训练和指令微调模型&#xff1a;Qwen2-0.5B、Qwen2-1.5B、Qwen2-7B、Qwen2-57B-A14B以及Qwen2-72B。对比当前最优的开源模型&#xff0c;Qwen2-72B在包括自然语言理解、知识、代码、数学及多…

新加坡裸机云多IP服务器为何适合跨境外贸业务

新加坡裸机云多IP服务器在跨境外贸业务中展现出了卓越的适配性&#xff0c;其独特优势为外贸企业提供了强大的支持。以下将详细阐述为何新加坡裸机云多IP服务器是跨境外贸业务的理想选择。 首先&#xff0c;新加坡裸机云多IP服务器在性能上表现出色。由于去除了虚拟化层的开销&…

聚观早报 | 粉笔将推AI智能老师;比亚迪宋L DM-i车型官宣

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 6月13日消息 粉笔将推AI智能老师 比亚迪宋L DM-i车型官宣 真我GT7 Pro配置全面升级 理想发布最新单周销量榜单 …

如何免费用 Qwen2 辅助你翻译与数据分析?

对于学生用户来说&#xff0c;这可是个好消息。 开源 从前人们有一种刻板印象——大语言模型里好用的&#xff0c;基本上都是闭源模型。而前些日子&#xff0c;Meta推出了Llama3后&#xff0c;你可能已经从中感受到现在开源模型日益增长的威力。当时我也写了几篇文章来介绍这个…

SMT智能车间MES系统的实施方案

SMT行业中MES系统实施的关键特征&#xff1a; SMT包括上下板设备&#xff0c;印刷设备&#xff0c;贴片设备&#xff0c;回流焊炉&#xff0c;AOI。AOI的全称是自动光学检查&#xff0c;它基于光学原理来检测焊接生产中遇到的常见缺陷。测试设备&#xff0c;测试设备等MES解决…

Java多商户商城系统/pc商城/公众号/h5/小程序

>>>系统简述&#xff1a; 基于java vue uniapp 开发的一套 新零售商城系统就是集客户关系管理营销电商系统&#xff0c;能够真正帮助企业基于微信公众号、小程序、移动端等&#xff0c;实现会员管理、数据分析,精准营销的电子商务管理系统。可满足企业新零售、批发…