【Db First】.NET开源 ORM 框架 SqlSugar 系列
.NET开源 ORM 框架 SqlSugar 系列
- 【开篇】.NET开源 ORM 框架 SqlSugar 系列
- 【入门必看】.NET开源 ORM 框架 SqlSugar 系列
- 【实体配置】.NET开源 ORM 框架 SqlSugar 系列
- 【Db First】.NET开源 ORM 框架 SqlSugar 系列
- 【Code First】.NET开源 ORM 框架 SqlSugar 系列
🔥Code First 代码优先,数据迁移,索引
DbFirst(数据库优先)是Entity Framework(EF)中的一种开发模式,其核心思想是先创建数据库,然后根据数据库的结构生成对应的实体类和数据访问代码。DbFirst模式适用于已经存在一个成熟的数据库,例如从旧系统迁移过来的数据库,或者数据库由专业的数据库管理员设计好,开发人员需要基于这个数据库来构建应用程序的情况。当然了,站在巨人的肩膀上,很多国产的ORM框架自出道也拥有该技能。
🟢优点和缺点
优点:
-
灵活性:DbFirst 模式允许开发人员利用现有的数据库结构,减少重复工作。
-
成熟度:适用于已有成熟数据库的情况,可以快速启动项目。
-
可维护性:由于数据库结构已经存在,维护和修改数据库结构时更为方便。
缺点:
-
依赖性:依赖于现有的数据库结构,可能无法完全满足业务需求的变化。
-
灵活性差:在敏捷开发环境中,可能需要频繁调整数据库结构,这可能会影响开发效率。
01. 代码:快捷生成实体
✔️优点:所有数据库都支持
只能满足常规要求,个性化太高的用 234方案
1. 代码生成实体到指定目录
//.net6以下
db.DbFirst.IsCreateAttribute().CreateClassFile("c:\\Demo\\1", "Models");//.net6以上 string加?
db.DbFirst.IsCreateAttribute().StringNullable().CreateClassFile("c:\\Demo\\1", "Models");//参数1:路径 参数2:命名空间
//IsCreateAttribute 代表生成SqlSugar特性
新功能1: 格式化文件名
db.DbFirst.FormatFileName(x => x.ToLower()).CreateClassFile("c\\");
//格式化类名和字段名 看标题6
新功能2: NET 7 字符串是否需要?设置
db.DbFirst.StringNullable().CreateClassFile("c\\");//强制可以空类型string加上?
2. 生成实体并且带有筛选
db.DbFirst.Where("Student").CreateClassFile("c:\\Demo\\2", "Models");
db.DbFirst.Where(it => it.ToLower().StartsWith("view")).CreateClassFile("c:\\Demo\\3", "Models");
db.DbFirst.Where(it => it.ToLower().StartsWith("view")).CreateClassFile("c:\\Demo\\4", "Models");
3. 生成带有SqlSugar特性的实体
db.DbFirst.IsCreateAttribute().CreateClassFile("c:\\Demo\\5", "Models");
4.生成实体带有默认值
db.DbFirst.IsCreateDefaultValue().CreateClassFile("c:\\Demo\\6", "Demo.Models");//5.1.4.108-preview12+ 支持了替换字符串db.DbFirst.Where("Student").CreatedReplaceClassString(it=>it.Replace("xxx","yyy"))// 也可以用正则 Regex.Replace.CreateClassFile("c:\\Demo\\2", "Models");
5.自定义格式化功能
添加 SettingPropertyTemplate 重载,加强自定义属性的定义功能
db.DbFirst//类.SettingClassTemplate(old => { return old;/*修改old值替换*/ })//类构造函数.SettingConstructorTemplate(old =>{return old;/*修改old值替换*/ }).SettingNamespaceTemplate(old => {return old + "\r\nusing SqlSugar;"; //追加引用SqlSugar})//属性备注.SettingPropertyDescriptionTemplate(old =>{ return old;/*修改old值替换*/})//属性:新重载 完全自定义用配置.SettingPropertyTemplate((columns,temp,type) => {var columnattribute = "\r\n [SugarColumn({0})]";List<string> attributes = new List<string>();if (columns.IsPrimarykey)attributes.Add("IsPrimaryKey=true");if (columns.IsIdentity)attributes.Add("IsIdentity=true");if (attributes.Count == 0) {columnattribute = "";}return temp.Replace("{PropertyType}", type).Replace("{PropertyName}", columns.DbColumnName).Replace("{SugarColumn}",string.Format(columnattribute,string.Join(",", attributes)));}).CreateClassFile("c:\\Demo\\7");
🚫 注意:该功能可能和 IsCreateAttribute 存在冲突一般不要一起使用
6.格式化类名和属性名
新功能:5.1.4.115
注意:FormatFileName(it=>it.Replace(" ","").Replace("-","_")) 要写成链式的,只能一个。
db.DbFirst.IsCreateAttribute()//创建sqlsugar自带特性.FormatFileName(it => "File_" + it) //格式化文件名(文件名和表名不一样情况).FormatClassName(it => "Class_" + it)//格式化类名 (类名和表名不一样的情况).FormatPropertyName(it => "Property_" + it)//格式化属性名 (属性名和字段名不一样情况).CreateClassFile("c:\\Demo\\4", "Models");//注意只能写一个//正确
FormatFileName(it=>it.Replace(" ","").Replace("-","_")) //错误
.FormatFileName(it=>it.Replace(" ",""))
.FormatFileName(it=>it.Replace("-","_"))
7. 替换生成后的 ClassString
🚫 注意:这个替换性能损耗最大,能用其他功能替换优先其他功能替换
//5.1.4.108-preview12+ 支持了替换字符串db.DbFirst.Where("Student").CreatedReplaceClassString(it=>it.Replace("xxx","yyy"))//也可以用正则 Regex.Replace.CreateClassFile("c:\\Demo\\2", "Models");
8.添加租户
db.DbFirst.Where("order").SettingClassDescriptionTemplate(it => {return it+"\r\n [Tenant(\""+db.CurrentConnectionConfig.ConfigId+"\")]";}).CreateClassFile("c:\\Demo\\1", "Models");
9. 生成String? .NET 7+
db.DbFirst.StringNullable().CreateClassFile("c\\");//强制可以空类型string加上?
02. 代码:Razor 模版生成
1.使用用例
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig(){ConnectionString = Config.ConnectionString,DbType = DbType.SqlServer,IsAutoCloseConnection = true,ConfigureExternalServices = new ConfigureExternalServices(){RazorService = new RazorService()//新建一个RazorService类 }});var templte = RazorFirst.DefaultRazorClassTemplate;//这个是自带的,这个模版可以修改db.DbFirst.UseRazorAnalysis(templte).CreateClassFile("c:\\Demo\\Razor\\");
RazorService 类在 framework和 .net Core 中小有区别看下面例子
2. net framework
创建 RazorService 需要安装 RazorEngine 3.10.0.0
using RazorEngine;
using RazorEngine.Templating;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace SqlSugar.DbFirstExtensions
{public class RazorService : IRazorService{public List<KeyValuePair<string,string>> GetClassStringList(string razorTemplate, List<RazorTableInfo> model){if (model != null && model.Any()){var result = new List<KeyValuePair<string, string>>();foreach (var item in model){try{item.ClassName = item.DbTableName;//格式化类名string key = "RazorService.GetClassStringList"+ razorTemplate.Length;var classString = Engine.Razor.RunCompile(razorTemplate, key, item.GetType(), item);result.Add(new KeyValuePair<string,string>(item.ClassName,classString));}catch (Exception ex){new Exception(item.DbTableName + " error ." + ex.Message);}}return result;}else{return new List<KeyValuePair<string, string>> ();}}}
}
3. net core |.net5 | .net6
创建 RazorService 需要安装 RazorEngine.NetCore 3.1
using RazorEngine;
using RazorEngine.Templating;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;namespace DbFirstRazorTest
{class Program{static void Main(string[] args){SqlSugarClient db = new SqlSugarClient(new ConnectionConfig(){ConnectionString = "server=.;uid=sa;pwd=sasa;database=SQLSUGAR4XTEST",DbType = DbType.SqlServer,IsAutoCloseConnection = true,ConfigureExternalServices = new ConfigureExternalServices(){RazorService = new RazorService()}});db.DbFirst.UseRazorAnalysis(RazorFirst.DefaultRazorClassTemplate).CreateClassFile("c:\\Demo\\Razor\\");}}public class RazorService : IRazorService{public List<KeyValuePair<string, string>> GetClassStringList(string razorTemplate, List<RazorTableInfo> model){if (model != null && model.Any()){var result = new List<KeyValuePair<string, string>>();foreach (var item in model){try{item.ClassName = item.DbTableName;//格式化类名string key = "RazorService.GetClassStringList" + razorTemplate.Length;var classString = Engine.Razor.RunCompile(razorTemplate, key, item.GetType(), item);result.Add(new KeyValuePair<string, string>(item.ClassName, classString));}catch (Exception ex){new Exception(item.DbTableName + " error ." + ex.Message);}}return result;}else{return new List<KeyValuePair<string, string>>();}}}
}
03. 工具ReZero生成实体
缺点:只支持常用数据库 SqlServer、MySql、 Pgsql 、Oracle、Sqlite、达梦 和 金仓(默认模式),我觉着这不算啥缺点了,该有的都有了。
优点: 界面操作 、修改模版方便
.NET 新代码生成器 ReZero.API - .NET 新代码生成器 - .NET果糖网
04. 获取表和列信息
下面方法可以拿到表信息,用途还是蛮多的。
//例1 获取所有表
var tables = db.DbMaintenance.GetTableInfoList(false);//true 走缓存 false不走缓存
foreach (var table in tables)
{Console.WriteLine(table.Description);//输出表信息
}
下面方法可以拿到列信息,用途还是蛮多的。
db.DbMaintenance.GetColumnInfosByTableName(表名, false)
相关文章:

【Db First】.NET开源 ORM 框架 SqlSugar 系列
.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列 …...

MySQL聚合查询分组查询联合查询
#对应代码练习 -- 创建考试成绩表 DROP TABLE IF EXISTS exam; CREATE TABLE exam ( id bigint, name VARCHAR(20), chinese DECIMAL(3,1), math DECIMAL(3,1), english DECIMAL(3,1) ); -- 插入测试数据 INSERT INTO exam (id,name, chinese, math, engli…...

告别照相馆!使用AI证件照工具HivisionIDPhotos打造在线证件照制作软件
文章目录 前言1. 安装Docker2. 本地部署HivisionIDPhotos3. 简单使用介绍4. 公网远程访问制作照片4.1 内网穿透工具安装4.2 创建远程连接公网地址 5. 配置固定公网地址 前言 本文主要介绍如何在Linux系统使用Docker快速部署一个AI证件照工具HivisionIDPhotos,并结合…...

通信原理第三次实验
实验目的与内容 实验操作与结果 5.1 刚开始先不加入白噪声,系统设计如下: 正弦波参数设置如下: FM设计如下: 延迟设计如下: 两个滤波器设计参数如下: 输出信号频谱为(未加入噪声)&a…...

【halcon】Metrology工具系列之 get_metrology_object_result_contour
get_metrology_object_result_contour (操作员) 名称 get_metrology_object_result_contour — 查询测量对象的结果轮廓。 签名 get_metrology_object_result_contour( : Contour : MetrologyHandle, Index, Instance, Resolution : ) 描述 get_metrology_object_result_…...

A052-基于SpringBoot的酒店管理系统
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…...

NLP信息抽取大总结:三大任务(带Prompt模板)
信息抽取大总结 1.NLP的信息抽取的本质?2.信息抽取三大任务?3.开放域VS限定域4.信息抽取三大范式?范式一:基于自定义规则抽取(2018年前)范式二:基于Bert下游任务建模抽取(2018年后&a…...

python常见问题-pycharm无法导入三方库
1.运行环境 python版本:Python 3.9.6 需导入的greenlet版本:greenlet 3.1.1 2.当前的问题 由于需要使用到greenlet三方库,所以进行了导入,以下是我个人导入时的全过程 ①首先尝试了第1种导入方式:使用pycharm进行…...

迅为RK3588开发板Android系统开发笔记-使用ADB工具
1 使用 ADB 工具 ADB 英文名叫 Android debug bridge ,是 Android SDK 里面的一个工具,用这个工具可以操作管理 Android 模拟器或者真实的 Android 设备,主要的功能如下所示: 在 Android 设备上运行 shell 终端,用命…...
什么是分布式数据库?
随着现代互联网应用和大数据时代的到来,分布式数据库成为了解决大规模数据存储和高并发处理的核心技术之一。本文将通过深入浅出的方式,带你全面理解分布式数据库的概念、工作原理以及底层实现技术。无论你是刚刚接触分布式数据库的开发者,还…...
Leetcode 3363. Find the Maximum Number of Fruits Collected
Leetcode 3363. Find the Maximum Number of Fruits Collected 1. 解题思路2. 代码实现 题目链接:3363. Find the Maximum Number of Fruits Collected 1. 解题思路 这一题是一道陷阱题…… 乍一眼看过去,由于三人的路线完全可能重叠,因此…...
【数据仓库 | Data Warehouse】数据仓库的四大特性
1. 前言 数据仓库是用于支持管理和决策的数据集合,它汇集了来自不同数据源的历史数据,以便进行多维度的分析和报告。数据仓库的四大特点是:主题性,集成性,稳定性,时变性。 2. 主题性(Subject-Oriented) …...
springboot配置多数据源mysql+TDengine保姆级教程
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pom文件二、yamlDataSourceConfigServiceMapper.xml测试总结 前言 Mybatis-plus管理多数据源,数据库为mysql和TDengine。 一、pom文件 <de…...

dns实验2:反向解析
启动服务: 给虚拟机网卡添加IP地址: 查看有几个IP地址: 打开配置文件: 重启服务,该宽松模式,关闭防火墙: 本机测试: windows测试:(本地shell)...

ZooKeeper 基础知识总结
先赞后看,Java进阶一大半 ZooKeeper 官网这样介绍道:ZooKeeper 是一种集中式服务,用于维护配置信息、命名、提供分布式同步和提供组服务。 各位hao,我是南哥,相信对你通关面试、拿下Offer有所帮助。 ⭐⭐⭐一份南哥编写…...
npm库xss依赖的使用方法和vue3 中Web富文本编辑器 wangeditor 使用xss库解决 XSS 攻击的方法
npm库xss依赖的使用方法和vue3 中Web富文本编辑器 wangeditor 使用xss库解决 XSS 攻击的方法 1. npm库xss依赖的使用方法1.1 xss库定义1.2 xss库功能 2. vue3 中 wangeditor 使用xss库解决 XSS 攻击的方法和示例2.1 在终端执行如下命令安装 xss 依赖2.2 在使用 wangeditor 的地…...

微信小程序蓝牙writeBLECharacteristicValue写入数据返回成功后,实际硬件内信息查询未存储?
问题:连接蓝牙后,调用小程序writeBLECharacteristicValue,返回传输数据成功,查询硬件响应发现没有存储进去? 解决:一直以为是这个write方法的问题,找了很多相关贴,后续进行硬件日志…...

5G NR:带宽与采样率的计算
100M 带宽是122.88Mhz sampling rate这是我们都知道的,那它是怎么来的呢? 采样率 子载波间隔 * 采样长度 38.211中对于Tc的定义, 在LTE是定义了Ts,在NR也就是5G定义了Tc。 定义这个单位会对我们以后工作中的计算至关重要。 就是在…...
go 和java 编写方式的理解
1. go 推荐写流水账式的代码(非贬义),自己管自己。java喜欢封装各种接口供外部调用,让别人来管自己。 2. 因为协程的存在, go的变量作用域聚集在方法内部,即函数不可重入,而java线程的限制&…...
C# 7.1 .Net Framwork4.7 VS2017环境下,方法的引用与调用
方法的调用比较好理解,就是给方法传递实参,执行方法代码。 方法引用涉及委托,委托签名与其引用的方法必须一致。以下demo说明方法调用与引用在写程序时的区别: using System; using System.Collections.Generic; using System.L…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...