SqlSugar分表笔记

1、使用SqlSugar的分表功能时,.net要使用.net core;
      我开始使用的是.net freamwork4.72,程序报异常,没能解决,换到.net core下面就正常;

2、SqlSugar自带分表支持按季度、月、周、日进行分表;

3、定义实体类对象时,主键不能是自增列、不能是int;主键支持long或guid:

[SplitTable(SplitType.Day)]//按天分表[SugarTable("t温度监测表_{year}_{month}_{day}")]//3个变量必须要有,这么设计为了兼容开始按年,后面改成按月、按日public class TemperatureMonitor{[SugarColumn(IsPrimaryKey = true)]public long Id { get; set; }[SugarColumn(ColumnName = "监测点", ColumnDataType = "nvarchar", Length = 500)]public string Name { get; set; }[SplitField]//分表字段 ,在插入的时候会根据这个字段插入哪个表,在更新删除时用这个字段找出相关表[SugarColumn(ColumnName = "记录时间")]public DateTime CreateTime { get; set; }[SugarColumn(ColumnName = "外部温度")]public double OutSiderTemperature { get; set; }[SugarColumn(ColumnName = "内部温度")]public double InnerTemperature { get; set; }public override string ToString(){return $"{CreateTime.ToString("yyyy-MM-dd HH:mm:ss")}\t{Name}\t外部温度={OutSiderTemperature}\t内部温度={InnerTemperature}";}}

4、通过代码创建数据表

// 使用时
var db = new SqlSugarScope(new ConnectionConfig()
{ConnectionString = "connection_string",DbType = DbType.SqlServer,IsAutoCloseConnection = true,InitKeyType = InitKeyType.Attribute  // 从实体特性中读取主键自增列信息
});
SqlSugar.SqlSugarScope db = BllDB.GetDB(); //根据TemperatureMonitor类定义,创建对应的数据表
db.CodeFirst.SetStringDefaultLength(200) //设置字符串类型的默认长度是200.SplitTables() //标识分表.InitTables<TemperatureMonitor>(); //如果数据库里没有这张表,就会自动新建一张

5、写数据到分表中

public static bool WriteData(List<TemperatureMonitor> monitors, out string error){error = null;try{var db = BllDB.GetDB();                long y = db.Insertable(monitors).SplitTable() .ExecuteReturnSnowflakeId();//写入数据并返回雪花ID,并自动赋值ID列return true;}catch (Exception ex){error = ex.Message;}return false;}

6、查询数据

//根据分表字段,确定对应的数据在哪张数据表上
TemperatureMonitor temp = new TemperatureMonitor() { CreateTime = DateTime.Parse("2014-12-03 15:35:35.983") };
var tb= db.SplitHelper(temp).GetTableNames(); //根据temp对象的分表字段信息,查询对应的数据在哪张分表上
  //查询符合条件(对象的Name==name)的所有数据 monitors = db.Queryable<TemperatureMonitor>().Where(it => it.Name == name)//用Name属性进行过滤.SplitTable(tab => tab) //查询所有分表.ToList();
//只查询最近的一张表
var db = BllDB.GetDB();
monitors = db.Queryable<TemperatureMonitor>().SplitTable(tab => tab.Take(1)) //最近一张表.Where(it => it.Name.Equals(name)).ToList();

//查询特定时间段内,Name==name的数据 
var db = BllDB.GetDB();
monitors = db.Queryable<TemperatureMonitor>().SplitTable(begintime,endtime) //通过时间查询(会自动生产CreateTime的过滤并找到对应时间的表).Where(it => it.Name.Equals(name)).ToList();

8、编辑数据


//修改Id=1808349695190372352的数据的数据值
db.Updateable<TemperatureMonitor>().SetColumns(it => new TemperatureMonitor(){OutSiderTemperature = 222,InnerTemperature = 11}).Where(it => it.Id == 1808349695190372352).SplitTable(tab => tab).ExecuteCommand();

9、删除数据


//删除根据Id删除数据
id = 1808404206764298259;
int cnt = db.Deleteable<TemperatureMonitor>().In(id).SplitTable(tab => tab).ExecuteCommand();
//直接根据实体集合删除 (全自动 找表插入)db.Deleteable(deleteList).SplitTable()    //SplitTable不能少.ExecuteCommand();

10、补充——insert时关于PK的处理

 //雪花IDdb.Insertable(data).SplitTable().ExecuteReturnSnowflakeIdList();//插入并返回雪花ID并且自动赋值ID   //服务器时间修改、不同端口用同一个代码、多个程序插入一个表都需要用到WorkId//保证WorkId唯一 ,程序启动时配置 SnowFlakeSingle.WorkId=从配置文件读取;//GUIDdb.Insertable(data).SplitTable().ExecuteCommand();//插入GUID 自动赋值 ID//大数据写入db.Fastest<OrderSpliteTest>().SplitTable().BulkCopy(List<OrderSpliteTest>);//大数据写入方式如果用到雪花ID需要手动赋值:SnowFlakeSingle.Instance.NextId()//部分数据库需配置 具体用法看文档: https://www.donet5.com/Home/Doc?typeId=2404// sql 如下
//INSERT INTO [SplitTestTable_20190101] --如果表不存在会自动建表
//           ([Id],[Name],[CreateTime])
//     VALUES
//           (@Id,@Name,@CreateTime)

更多信息请参考官网:.NET ORM 分表组件,自动分表 - SqlSugar 5x - .NET果糖网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/40623.shtml

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

相关文章

ArcGIS Pro SDK (七)编辑 15 版本控制选项

ArcGIS Pro SDK &#xff08;七&#xff09;编辑 15 版本控制选项 文章目录 ArcGIS Pro SDK &#xff08;七&#xff09;编辑 15 版本控制选项获取和设置版本控制选项 环境&#xff1a;Visual Studio 2022 .NET6 ArcGIS Pro SDK 3.0 获取和设置版本控制选项 var vOptions A…

PostgreSQL 技术内幕(十七):FDW 实现原理与源码解析

对于一定规模的系统而言&#xff0c;数据仓库往往需要访问外部数据来完成分析和计算。外部数据包装器&#xff08;Foreign Data Wrapper&#xff0c; 简称 FDW&#xff09;是 PostgreSQL 提供的访问外部数据源机制。用户可以使用简单的 SQL 语句访问和操作外部数据源&#xff0…

Python面试题:Python 中的生成器(generator)是什么?有什么优点?

在Python中&#xff0c;生成器&#xff08;generator&#xff09;是一种特殊的迭代器&#xff0c;使用yield关键字生成值&#xff0c;可以逐个生成序列中的值&#xff0c;而不需要一次性将所有值加载到内存中。生成器函数在定义时使用def关键字&#xff0c;并包含一个或多个yie…

[word] Word如何快速生成一段文本 #知识分享#学习方法

Word如何快速生成一段文本 Word如何快速生成一段文本&#xff1f;有时候我们会用一大段文字来做一些功能测试&#xff0c;不少朋友的做法就是脸滚键盘&#xff0c;一顿乱按&#xff0c;这样看起来文笔不通&#xff0c;看着也会比较难受&#xff0c;测试功能的效果也不怎么理想…

uniapp中实现跳转链接到游览器(安卓-h5)

uniapp中实现跳转链接到游览器&#xff08;安卓-h5&#xff09; 项目中需要做到跳转到外部链接&#xff0c;网上找了很多都不是很符合自己的要求&#xff0c;需要编译成app后是跳转到游览器打开链接&#xff0c;编译成web是在新窗口打开链接。实现的代码如下&#xff1a; 效果&…

java基于ssm+vue 旅游信息资源平台

1前台首页功能模块 旅游资源网站 &#xff0c;在系统首页可以查看首页、景点信息、酒店信息、客房信息、交流论坛、红色文化、个人中心、后台管理、客服等内容&#xff0c;如图1所示。 图1系统功能界面图 用户登录、用户注册&#xff0c;在注册页面可以填写用户名、密码、姓名…

Redis GEO 功能解析

Redis GEO 功能解析 引言 Redis GEO 是 Redis 数据库提供的一个特殊功能,用于存储地理位置信息,并支持基于地理位置的查询。这一功能对于需要处理地理位置数据的现代应用程序来说非常宝贵,如外卖配送、社交媒体、地图服务等。本文将详细介绍 Redis GEO 的功能、使用方法,…

DFS之剪枝与优化——AcWing 165. 小猫爬山

DFS之剪枝与优化 定义 DFS之剪枝与优化指的是在执行深度优先搜索(DFS, Depth-First Search)时&#xff0c;采取的一系列策略来减少搜索空间&#xff0c;避免无效计算&#xff0c;从而加速找到问题的解。剪枝是指在搜索过程中&#xff0c;当遇到某些条件不符合解的要求或者可以…

产科管理信息系统源码:产科电子病历、高危孕产妇五色管理系统源码 孕产妇健康管理信息平台源码

产科管理信息系统源码&#xff1a;产科电子病历、高危孕产妇五色管理系统源码 孕产妇健康管理信息平台源码 产科电子病历系统是以采集病人在整个医疗护理过程中所产生的各种信息。包括病案首页、门诊病历、住院病历、出院记录、病人病程记录等全部病历文书&#xff1b;涵盖文字…

宿舍报修小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;基础数据管理&#xff0c;论坛管理&#xff0c;故障上报管理&#xff0c;新闻信息管理&#xff0c;维修人员管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;新闻信息…

node.js外卖小程序-计算机毕业设计源码81838

摘要 自从计算机发展开始&#xff0c;计算机软硬件相关技术的发展速度越来越快&#xff0c;在信息化高速发展的今天&#xff0c;计算机应用技术似乎已经应用到了各个领域。在餐饮行业&#xff0c;除了外卖以外就是到店里就餐&#xff0c;在店里就餐如果需要等待点餐的话&…

转盘输入法-单独鼠标版本

序 转盘输入法&#xff0c;给你的聊天加点新意。它不用常见的九宫格或全键盘&#xff0c;而是把字母摆在圆盘上&#xff0c;一滑一滑&#xff0c;字就出来了&#xff0c;新鲜又直接。 单独鼠标版本GIF演示 演示软件下载 转盘输入法https://download.csdn.net/download/u0146…

zdppy+vue3+antd 实现表格数据渲染

基本用法 <template><a-table :columns"columns" :data-source"data"><template #headerCell"{ column }"><template v-if"column.key name"><span>xxx Name</span></template></temp…

免费鼠标连点器有吗?需要付费吗?鼠标连点器电脑版免费推荐6款!

在数字化时代&#xff0c;鼠标连点器成为了许多用户提高工作效率、优化游戏体验的得力助手。然而&#xff0c;面对市场上琳琅满目的鼠标连点器软件&#xff0c;很多用户都会产生疑问&#xff1a;是否有免费的鼠标连点器&#xff1f;它们真的需要付费吗&#xff1f;今天&#xf…

名企面试必问30题(二十二)——你对加班的看法?

1.思路 实际上&#xff0c;很多公司询问此问题&#xff0c;并非表明一定要加班&#xff0c;只是想测试您是否愿意为公司奉献。在回答时&#xff0c;一定不能有诸如不接受加班、不接受 996 等话语&#xff0c;因为没有公司能承诺永远不加班。主要回答应围绕因何原因加班&#xf…

lua入门(1) - 基本语法

本文参考自&#xff1a; Lua 基本语法 | 菜鸟教程 (runoob.com) 需要更加详细了解的还请参看lua 上方链接 交互式编程 Lua 提供了交互式编程模式。我们可以在命令行中输入程序并立即查看效果。 Lua 交互式编程模式可以通过命令 lua -i 或 lua 来启用&#xff1a; 如下图: 按…

物理删除和逻辑删除区别

物理删除和逻辑删除是数据库管理中针对记录删除操作的两种不同方式&#xff0c;它们的主要区别在于数据的实际处理和后续影响&#xff1a; 物理删除&#xff1a; 操作实质&#xff1a;物理删除会将数据记录从数据库表中彻底移除&#xff0c;包括记录所占的磁盘空间都会被释放。…

Vue3 对跳转 同一路由传入不同参数的页面分别进行缓存

1&#xff1a;使用场景 从列表页跳转至不同的详情页面&#xff0c;对这些详情页面分别进行缓存 2&#xff1a;核心代码 2.1: 配置路由文件 在路由文件里对需要进行缓存的路由对象添加meta 属性 // 需要缓存的详情页面路由 { name: detail, path: /myRouter/detail…

十大排序:插入/希尔/选择/堆/冒泡/快速/归并/计数/基数/桶排序 汇总(C语言)

目录 前言非线性时间比较类插入排序(1) 直接插入排序(2) 希尔排序 选择排序(3) 选择排序优化版(4) 堆排序 交换排序(5) 冒泡排序(6) 快速排序hoare版本挖坑版前后指针版非递归版 归并排序(7) 归并排序递归版非递归版 线性时间比较类(8) 计数排序基数排序与桶排序 总结 前言 在计…

报文交换 和 电路交换对比说明

报文交换 和 电路交换 是两种不同的网络通信方式&#xff0c;它们在数据传输的方式、效率、成本和适用场景等方面有所不同。下面详细对比这两种交换方式&#xff0c;并举例说明。 报文交换&#xff08;Message Switching&#xff09; 定义&#xff1a;报文交换是一种存储-转发…