应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

sqlsugar 对接mysql分表。sqlsguar分表注意事项。分表思路,通过日期获取分表表名等

10646人阅读 2021/7/18 17:29 总访问:5182512 评论:0 收藏:0 手机
分类: 软件架构

官方文档:
https://www.donet5.com/Home/Doc?typeId=1201

sqlsguar分表注意事项

注意一:需要有一个分表字段,插入的时候需要对这个字段赋值

官方例子上面的:

  1. [SplitField] //分表字段 在插入的时候会根据这个字段插入哪个表,在更新删除的时候用这个字段找出相关表
  2. public DateTime CreateTime { get; set; }

插入的时候需要对这个字段赋值,不然他不知道向那个表插入。虽然不赋值他会有一个默认的日期:1900-01-01 00:00:00

注意二:主键类型

如果使用雪花id,主键类型要使用long

mysql对应的主键类型是:bigint(64)

  1. id bigint(64) PRIMARY key,

但是要注意如果最开始主键类型写错了,写成了int,然后去执行插入失败了,会提示:MySql.Data.MySqlClient.MySqlException:“Out of range value for column ‘id’ at row 1” 就是超长了,这个时候不能去修改数据库的表,修改成多长都是报这个错。因为第一次插入的时候他已经生成了一个表了,而且主键是int类型的,长度明显不够。

这个时候应该把生成的这个表删除掉,然后重新执行就行了,因为使用了分表插入的时候,插入的表其实不是我们在数据库里边创建的表,而是他内部的逻辑在控制,要注意这点。

通过日期获取分表名

虽然sqlsugar有根据时间直接获取分表表名的方法

  1. GetTableName(data.CreateTime);//根据时间获取表名

还有根据一个区间获取的

  1. SplitTable(beginDate,endDate)

但是有时候我们的sql比较复杂的,需要自己手写sql的,所以我们需要自己封装一个方法,通过日期获取分表表明的方法,其实也非常简单。根据时间就可以去找到分表了。比如要查询2022-5的数据要查询的肯定就是20220101这张表(根据年分表的情况),月都不用管,只取年,然后格式化一下转字符串就可以得到分表了,只查询一个表很方便,又不是一个区间。

  1. /// <summary>
  2. /// 根据时间获取分表的名称
  3. /// 根据时间就可以去找到分表了。比如要查询2022-5的数据要查询的肯定就是20220101这张表,月都不用管,只取年,然后格式化一下转字符串就可以得到分表了,只查询一个表很方便,又不是一个区间
  4. /// </summary>
  5. /// <param name="_dateTime"></param>
  6. /// <returns></returns>
  7. public static string GetSplitTableNameByDate(DateTime _dateTime)
  8. {
  9. //根据传过来的时间取到年,只取年即可,因为分表是根据年分表的
  10. DateTime dateTime = new DateTime(_dateTime.Year, 1, 1);
  11. string splitTableName = dateTime.ToString("yyyyMMdd");
  12. return splitTableName;
  13. }

测试代码如下:

  1. DateTime dateTime = DateTime.Parse("2022-6-6");
  2. string tableName = "statisticsdata_month_" + DateTimeTools.GetSplitTableNameByDate(dateTime);
  3. Console.WriteLine(tableName);
  4. string tableName2 = "statisticsdata_month_" + DateTimeTools.GetSplitTableNameByDate(DateTime.Parse("2021-09-24"));
  5. Console.WriteLine(tableName2);

效果如下,可以正确的得到分表的表名:

贴一下分表名称使用的规则

  1. [SugarTable("statisticsdata_month_{year}{month}{day}")]

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

EF Core sqlsugarFreeSqlDapper EF 对比

EF Core优点:微软官方ORM功能强大,支持模式多文档齐全缺点:1.复杂查询生成的SQL语句性能太差(对操作功力要求高)2.一些...

sqlsugar官方文档与基本用法sqlsugar直接执行sqlsqlsugar分组函数sqlsugar官网sqlsugar在直接执行sql中使用Insqlsugar 返回第一行第一列

sqlsugar官方文档https://www.donet5.com/Home/Docsqlsugar基本用法下载依赖:&lt;ItemGroup&gt; &lt;PackageReferenceInc...

sqlsugarScope与sqlsugarClient区别

SqlSugarScope原理它是对SqlSugarClient的封装让他支持线程安全,并且在不同上下文自动new 出 SqlSugarClient,在编写代码...

sqlsugar生成实体

添加依赖:&lt;ItemGroup&gt; &lt;PackageReference Include=&quot;SqlSugarCore&quot; Version=&quot;5.0.5.4&quot; ...

sqlsugar生成实体sqlsugar生成Model

添加依赖:&lt;ItemGroup&gt; &lt;PackageReference Include=&quot;SqlSugarCore&quot; Version=&quot;5.0.0.15&quot;...

sqlsugar dbfirst 模型生成实体生成

非常简单贴一下代码: //参数1:路径 参数2:命名空间。IsCreateAttribute 代表生成SqlSugar特性 db.DbFirst.IsCreateAt...

sqlsugar 不映射字段sqlsugar 忽略字段sqlsugar字段不与数据库表映射sqlsugar定义某属性不映射到数据库

利用特性SugarColumn,将IsIgnore设置为True即可! [SugarColumn(IsIgnore = true)] public string Token { get; set; }

vue elementui分页条使用与.net后台sqlsugar等分页方法使用常用分页模板

分页条&lt;div style=&quot;margin-top: 20px;margin-bottom: 20px;text-align: center;&quot;&gt; &lt;el-pagination ...

.NET ORM核心功能之导航属性- EFCore和 sqlsugar sqlsugar 2023年导航新功能

[TOC]导航属性导航属性是作为.NET ORM核心功能中的核心,在SqlSugar没有支持导航属性前,都说只是一个高级DbHelper, 经过3...

sqlsugar in多字段linq 多字段查询多对多查询方式 in and

sqlsugar in多字段版本&gt;=5.1.4.67-preview04 List&lt;OrderItem&gt; list=xxx; db.Queryable&lt;OrderItem&gt;().Wh...

基础领域驱动DDD框架搭建配合sqlsugar基础架构搭建使用仓储.net使用Autofac实现自动注入通过特性封装事务特性实现工作单元

[TOC]一:创建一个WebApi项目随便取名一个,比如TeacherCertificationAPI效果如下: 顺便在appsettings.json中配置一下...

sqlsugar 树型递归查询UtilMethods.BuildTree 用法

sqlsugar 树型递归查询官方文档:https://www.donet5.com/home/doc?masterId=1&amp;typeId=2311 UtilMethods.BuildTree ...

多对多的查询解析sqlsugar 多对多的名称查询解析

多对多解析名称的常用步骤代码如下: #region 查询小组分配的管理员(一个小组可以分配多个管理员) List&lt;string&gt; ...

JetBot 对接手柄

JetBot 对接手柄[TOC] 启动手柄首先将配对手柄的蓝牙插入到电脑中。 启动手柄,推到ON 检查手柄连接首先打开https://har...

mysql主从复制+读写分离

使用Mysql读写分离和主从复制的原因:*单台MySQL服务器的安全性,高可用性,高并发都是不满足实际的生产需要。介绍:1.MySQ...