SqlSugar ORM 5.X 官网 、文档、教程 - SqlSugar 5x - .NET果糖网 (donet5.com)

参考文档:

基于SqlSugar的数据库访问处理的封装,支持多数据库并使之适应于实际业务开发中_倾听铃的声的博客-CSDN博客_sqlsugar 多库

C# 数据操作系列 - 14 深入探索SqlSugar_chinaherolts2008的博客-CSDN博客

SqlSugar轻量ORM - 張暁磊 - 博客园 (cnblogs.com)

一.配置SqlSuagr连接到SqlServer数据库

1.创建一个ConnectionConfig

(1)主要函数

public static ConnectionConfig BuildConnConfig(dynamic configId, DbType dbType, string connectionString){return new ConnectionConfig(){ConfigId = configId,DbType = dbType,                //数据库类型ConnectionString = connectionString,//连接字符串IsAutoCloseConnection = true,   //自动释放和关闭数据库连接,如果有事务事务结束时关闭,否则每次操作后关闭//是否自动释放数据库(默认false),设为true我们不需要close或者Using的操作,比较推荐MoreSettings = new ConnMoreSettings()//更多设置{IsWithNoLockQuery = true     //为true表示可以自动删除二级缓存},//InitKeyType = InitKeyType.Attribute,//默认就是这个,从实体特性中读取主键自增列信息,初始化主键和自增列信息到ORM的方式AopEvents = new AopEvents   //调试SQL事件,可以删掉{OnLogExecuting = (sql, p) =>{p.ToDictionary(it => it.ParameterName, it => it.Value);System.Diagnostics.Trace.WriteLine(sql);System.Diagnostics.Trace.WriteLine(string.Join(",", p?.Select(it => it.ParameterName + ":" + it.Value)));}}};}

(2)传参

在一个json文件中配置好了数据库的参数

到时候直接读取json,并转换成一个实体类的对象

if (!db.Enabled)//判断这个连接是否有用
{return;
}
//db是那个实体类的对象
DbType dbType = (DbType)System.Enum.Parse(typeof(DbType), db.DbType.ToString());
SqlConnectionStringBuilder sqlcsb = new SqlConnectionStringBuilder(db.ConnectionString);
ConnectionConfig dbConfig = DbContext.BuildConnConfig(db.ConfigId, dbType, sqlcsb.ToString());

2.初始化数据库连接

 public static void SetupDBConnectionConfig(List<ConnectionConfig> connectionConfigs){if (db != null){db.CommitTran();//存自最后一个BeginTrans方法调用以来的所有更改,并结束当前事务。db.Dispose();//回滚任何挂起的事务,清空了connectionString,下次用在new connection,不会报错return;}//因为SqlSugarScope继承成IDisposable,如果不是全局使用,可以使用using自动释放资源,然后在using的大括号内进行配置db = new SqlSugarScope(connectionConfigs);//SetDbFirst();//SetCodeFirst();}

3.DbFirst

public static void SetDbFirst(){//根据数据库生成对应的类,其他方法看官网db.DbFirst.IsCreateAttribute().CreateClassFile(@"D:\0.data\VSCode\ReportGeneration\Models\1", "Models");//第二个参数可以缺省//加 @表示无视转义符的存在。比如@”\n" 不是表示换行,而是表示\和n,否则要\\//采用Dbfirst时,建议先生成一个类库(需要添加SqlSugar的包),然后生成路径设为这个类库下的一个新的文件夹//如果文件没有显示(和这个类库的csproj文件有关,可以打开查看只有里面有的文件名才能显示)//可以点显示所有文件查看是否存在(资源管理器刷新右边第2个按钮)//如果存在且没有显示,则在桌面打开文件夹拖进左侧的类库下,没有的类删掉}

4. CodeFirst

public static void SetCodeFirst(){//首先要引用上面创建的数据库类库Assembly assembly = Assembly.LoadFrom("Models.dll");//使用反射加载程序集并执行方法IEnumerable<Type> typelist = assembly.GetTypes().Where(c => c.Namespace == "Models");//获取此程序集中定义的类型,且命名空间=Models的,where可以不用bool Backup = false;//是否备份db.DbMaintenance.CreateDatabase();  //创建一个数据库出来if (Backup){db.CodeFirst.BackupTable().InitTables(typelist.ToArray());}else{db.CodeFirst.InitTables(typelist.ToArray());}//在下面可以初始化种子数据}

7.Model类的属性特性

namespace TemplateNode.Models
{[SugarTable("BaseNode2")]//当类名和表名不一样时可以设置表别名 指定表明public class BaseNode{[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]//IsPrimaryKey是主键,IsIdentity是自增public int Id { get; set; }[SugarColumn(ColumnName = "Name2", ColumnDescription = "注释")]//ColumnName:属性名和表中的列名不一样 设置列名,ColumnDescription:设置表的备注 public string Name { get; set; }[SugarColumn(IsIgnore = true)]//IsIgnore表示ORM不处理该列public string Description { get; set; }[SugarColumn(IsOnlyIgnoreInsert = true, IsNullable = true, Length=10)]//IsOnlyIgnoreInsert:插入操作不处理该列,IsNullable:允许为NULL,Length不指定默认为50public string Description2 { get; set; }[SugarColumn(IsOnlyIgnoreUpdate = true,ColumnDataType = "Nvarchar(256)")]//IsOnlyIgnoreUpdate:更新操作不处理该列,ColumnDataType/自定格式的情况,length不要设置public string Description3 { get; set; }}
}

还可以自定义特性,更多参考连接
配置实体 - SqlSugar 5x - .NET果糖网 (donet5.com)

Code First 代码优先,数据迁移 - SqlSugar 5x - .NET果糖网 (donet5.com)

6. 实现数据库读写分离

总结:不要盲目使用读写分离 ,在考虑读写分离之前应该先考虑缓存 例如( redius)   和大数据表的水平切割

(1)首先SqlServer那里需要建立主库和分库,参考下面连接中的内容

SqlServer中配置读写分离_木白星枝的博客-CSDN博客

(2)需要重新配置ConnectionConfig

 public static void SetSeparation(){String connectionString = "Data Source=42.12.6.03,1433;Initial Catalog=d_test;User ID=sa;Password=48";List<SlaveConnectionConfig> slaveConnectionConfigs = new List<SlaveConnectionConfig>(){new SlaveConnectionConfig(){HitRate=10,ConnectionString="Data Source=42.12.6.03,1433;Initial Catalog=d1;User ID=sa;Password=48"},new SlaveConnectionConfig(){HitRate=10, //概率ConnectionString="Data Source=42.12.6.03,1433;Initial Catalog=d2;User ID=sa;Password=48"}};ConnectionConfig dbConfig =BuildConnConfig2(null, DbType.SqlServer, connectionString, slaveConnectionConfigs);}public static ConnectionConfig BuildConnConfig2(dynamic configId, DbType dbType, string connectionString,List<SlaveConnectionConfig> slaveConnectionConfigs){return new ConnectionConfig(){ConfigId = configId,          //可有可无,指定为1吧,不赋值也可以DbType = dbType,                //数据库类型ConnectionString = connectionString,//主库的数据库连接SlaveConnectionConfigs=slaveConnectionConfigs,//从库的数据库连接IsAutoCloseConnection = true,   //(默认false)是否自动释放数据库,设为true我们不需要close或者Using的操作,比较推荐MoreSettings = new ConnMoreSettings(){IsWithNoLockQuery = true//看这里   //为true表示可以自动删除二级缓存},//InitKeyType = InitKeyType.Attribute,//默认就是这个,从实体特性中读取主键自增列信息,初始化主键和自增列信息到ORM的方式AopEvents = new AopEvents   //调试SQL事件,可以删掉{OnLogExecuting = (sql, p) =>{p.ToDictionary(it => it.ParameterName, it => it.Value);System.Diagnostics.Trace.WriteLine(sql);System.Diagnostics.Trace.WriteLine(string.Join(",", p?.Select(it => it.ParameterName + ":" + it.Value)));}}};}

(3)修改主库,从库会跟着改,修改从库,主库不变,修改主库后,数据同步到从库有延迟。

同步有延迟,要么业务允许延迟,要么直接查询主库

直接查询主库需要在查询前进行设置

//主要是针对及时性要求比较高的
db.Ado.IsDisableMasterSlaveSeparation = true;   //直接基于主库进行查询

应该监控文件更新,手动刷新不太好

6.实现分表

(1)分表使用场景

<1>.NET可扩展架构设计,比如一个ERP用5年不卡,到了10年就卡了因为数据太多了,这个时候很多人都是备份然后清空数据

<2>.NET 数据量太多 ,每天都有几十上百万的数据进入库,如果不分表后面查询将会非常缓慢

<3>.NET性能瓶颈 ,数据库现有数据超过1个亿,很多情况下索引会莫名失效,性能大大下降

(2)内置分表使用

.NET 自带分表支持按年、按季、按月、按周、按日进行分表

根据插入的数据自动分表,在数据库下自动创建分表,查询的时候不需要考虑具体几个分表。

具体操作参看官网。

SqlSugar框架的学习相关推荐

  1. C# SqlSugar框架的学习使用(五)-- 更新和删除数据的详细用法

    前言 上一篇<C# SqlSugar框架的学习使用(四)-- 插入数据的详细用法>我们已经把SqlSugar的插入多种用法实现了,这篇我们就来说说更新数据和删除数据的多种用法.我们就用上一 ...

  2. C# SqlSugar框架的学习使用(一)--SqlSugar简介及创建

    前言 最近有个开发项目准备启动,由于要求的开发周期较短,所以准备用个C#的框架,原本最初考虑用成熟的EF框架,但是觉得那个框架也太重了,就在网上找找了别的,无意间发现了SqlSugar的框架.简单试了 ...

  3. 通过 DLPack 构建跨框架深度学习编译器

    通过 DLPack 构建跨框架深度学习编译器 深度学习框架,如Tensorflow, PyTorch, and ApacheMxNet,快速原型化和部署深度学习模型提供了强大的工具箱.不幸的是,易用性 ...

  4. Java3大框架的学习都是什么

    java是互联网行业的第一编程语言,相信大家都已经有了解了,事实也确实如此,java还是世界第一编程语言,在java培训学习的过程中,框架是程序员们必学的知识点,而且是十分重要的应用,Spring.S ...

  5. 适合初学者对Yaf框架的学习(一)

    前言 最近接触到Yaf框架,从最初按照鸟哥惠新宸的写的关于Yaf手册,到自己写一个hello world 程序,对于我这个新手来说还是蛮曲折的,大家都知道yaf框架是用C写的,所以自身的效率和性能,还 ...

  6. Java的3大框架都学习什么呢?

    Java是互联网行业的第一编程语言,相信大家都已经有了解了,事实也确实如此,Java还是世界第一编程语言,在学习Java的过程中,框架是程序员们必学的知识点,而且是十分重要的应用,Spring.Str ...

  7. 定时任务框架APScheduler学习详解

    定时任务框架APScheduler学习详解 APScheduler简介 在平常的工作中几乎有一半的功能模块都需要定时任务来推动,例如项目中有一个定时统计程序,定时爬出网站的URL程序,定时检测钓鱼网站 ...

  8. Hacker News热文:请停止学习框架,学习领域驱动设计(DDD)(获500个点赞)

    在 Hacker News 上获得接近 500 个点赞的一篇名为<停止学习框架>的文章称: 我们是程序员,每天都在了解最新的技术,每天都在学习编程语言.框架和库,因为我们知道的现代编程工具 ...

  9. 迷你MVVM框架 avalonjs 学习教程20、路由系统

    迷你MVVM框架 avalonjs 学习教程20.路由系统 时间 2014-10-28 14:44:00  Ruby's Louvre 原文  http://www.cnblogs.com/rubyl ...

最新文章

  1. 《Head First Python》第一章
  2. ZooKeeper自定义数据日志目录
  3. easyplayerpro 使用说明_EasyPlayerPro(Windows)流媒体播放器开发之ffmpeg log输出报错
  4. PHP案例:数组用法演示
  5. 解决了MovieClip缩略图问题
  6. 视觉平台搭建——光源选择
  7. STL中的序列式容器——vector(向量)
  8. 蓝桥杯-----十六进制转八进制
  9. python爬取文字和图片_Selenium_Chrome爬取文本和百度图片
  10. 学习shell小窍门
  11. 计算机专业保研英语自我介绍,计算机保研面试英文自我介绍.doc
  12. kali开机密码破解
  13. 创建CHM格式电子书
  14. VM虚拟机Ubuntu配置静态ip,亲测有效
  15. 大都会高端酒店推出迪拜目前最昂贵的豪华顶楼
  16. c语言编译免疫算法亲和力,蚁群算法模拟系统设计及实现.doc
  17. WorldEdit 指令大全 开发记录
  18. 想进入游戏建模行业,必须要了解的基础知识
  19. 苹果x为什么总黑屏_苹果X突然黑屏重启怎么回事?教你强制重启方法
  20. 谷歌翻拉取别的分支_如何将品牌分支机构的位置添加到Google地图

热门文章

  1. html dtd定义,DTD 简介
  2. pyqt5 最小化 系统托盘,PyQt5:如何从系统托盘图标上下文菜单启动窗口?
  3. python交互式环境执行_如何在交互式环境中执行Python程序
  4. 基于Django的博客兼学术主页管理网站
  5. 防火墙技术之安全策略
  6. 深圳行十一:香港自由行
  7. framework 模块编译问题
  8. 关于磁盘分区管理工具
  9. Read Uncommitted
  10. 1680 Catalan数