数据库水平切表/分表后,基于FreeSql的数据操作方法

1、对聊天记录进行数据存取,但长年累月的消息数据都存储在同一个表内,累积的数据越来越多,数据读取的效率会受影响。2、设计以CreateTime字段为分表依据,按CreateTime的月份数值进行分表,不同月份的数据存入不同的表内3、建立接口,对要分表的实体模型进行字段约束,所有要分表的实体都必须具备该属性 public interface IMonthSeparatedModel { public DateTime CreateTime { get; set; } }4、建立Message类,并实现接口中的必须具备属性,在各个属性上标注数据库中对应的数据类型,这样FreeSql在根据不同月份自动建表时,会依照...


阅读正文

[日常记录] JS中,对日期类型(Date)的一些常用扩展函数

// 添加秒数 Date.prototype.addSecond = function (count) { var time = this.getTime(); time += count * 1000; return new Date(time); } // 添加分钟 Date.prototype.addMinute = function (count) { return this.addSecond(count * 60); } // 添加小时 Date.prototype.addHour = function (count) { return this.addMinute(count * 60); } // 添加天数 Date.prototype.addDay = function (count) { return this.addHour(count * 24); } // 添加月份 Date.prototype.addMonth = f...


阅读正文

在.net5环境下,使用BackgroundService实现定时任务

1、新建一个类文件,继承自虚拟类BackgroundService,并实现BackgroundService中的各项方法public class SyncScheduleService : BackgroundService { private Timer _timer; // 自行定义要定时执行的方法 protected void SyncData(object state = null) { try { // TODO: 此处是你想要定时执行的代码 } catch (Exception ex) { // TODO: 此处是定时执行出现异常时要执行的代码 } } protected override Task Execut...


阅读正文

在.net平台下使用C#调用企业微信FinanceSDK,对接会话内容存档数据

前段时间接到任务,要开发一个业务系统,用于查询企业微信的会话内容存档数据。主要面向的用户群体是之前使用企业QQ,转型到使用企业微信的企业客服用户。该系统需要可查询企业内部客服与外部客户之间的聊天存档数据,用于追溯服务记录、监控服务质量。需求部门提出需求之后,我看了一眼企业微信开发者网站上有这方面接口,便答应了下来。没想到真正开发的时候遇上了困难:企业微信官方提供的会话内容存档的SDK只支持C和Java,没有针对C#或者.net平台下的其他语言开放SDK。苦于承诺过对方,便寻思着用C#来调用C_sdk。以下为开发过程中的关键步骤:1.通过企业...


阅读正文

浅谈观察者模式(发布-订阅模式)的应用

面向对象编程是对现实世界的抽象,是通过代码构件一个虚拟世界。在虚拟世界中有人、有物,也有很多关系到“人”和“物”之间的事情和业务。以下我通过一个现实世界中的简单案例,来介绍面向对象编程的一种设计模式——观察者模式,也经常被称为“发布-订阅模式”。现实中的事情经常具有复杂性和相关性,即一件事情发生过后往往引发其他相关联的事情。以网购下单为例:我们在网上商城点击按钮支付订单之后,商城系统的后端会同步通知仓库管理员打包物品发货、记录买家用户的消费日志、给买家用户发送短信提醒等一系列操作。这个看似简单的功能,可以拆分成为4个不同...


阅读正文

SQL中根据特定节点,获取其所有子级节点、父级节点

1. 根据特定节点,获取其下属的所有子级节点WITH temp AS ( SELECT * FROM [表名] WHERE Id=9999 --主键Id=9999 UNION ALL SELECT t.* FROM temp, [表名] AS t WHERE temp.Id=t.ParentId --子级Id=父级Id ) SELECT * FROM temp;2. 根据特定节点,获取其所有父级节点WITH temp AS ( SELECT * FROM [表名] WHERE Id=9999 --主键Id=9999 UNION ALL SELECT t.* FROM temp, [表名] AS t WHERE temp.ParentId=t.Id --父级Id=子级Id ) SELECT * FROM temp;


阅读正文

浅谈组合模式的应用

“面向对象编程”是对现实世界的抽象,是通过代码构建出一个虚拟的世界。 如下图所示,这是一个歌唱比赛节目的游戏规则示例(为便于举例,采用了大家耳熟能详的歌手名称,不代表歌手的演艺实力),如何在虚拟世界中通过代码实现这样的游戏规则呢? 上图表述了游戏的三个阶段: 1. 16进8淘汰赛:由16名参赛者一一对决,票数优先者晋级下一轮比赛,票数落后者被淘汰。 2. 8进4晋级赛:由8名参赛者一一对决,票数优先者晋级到本赛区决赛。 3. 赛区争夺战:由前两个阶段产生出本赛区冠亚军共2名,组成赛区战队,与另一赛区战队对决。对...


阅读正文

浅谈策略模式的应用

“面向对象编程”是对现实世界的抽象,是通过代码构建出一个虚拟的世界。在虚拟世界中有人、有物,这些人和物都被称为“对象”。虚拟世界中的对象与现实世界中的一样,人有姓名、性别、年龄等一系列属性,也有吃饭、如厕、睡眠等一系列行为。 以下我通过一些真实世界中的事例,来介绍如何使用面向对象的思想来构建一个虚拟世界中的行为,并且通过“策略模式”来实现这一行为。 如上图所示,这是我们在现实世界中经常发生的行为,男士入男厕、女士入女厕。那么我们在“面向对象”的虚拟世界中如何实现这一行为呢? 首先通过代码建立“洗手间”和“人”这两个“类...


阅读正文