Closed DragonFlyEast closed 1 year ago
很高兴能找到如此强大的项目,目前正在学习,使用过程中发现以下问题,
假设存在 eventfile 表,想实现按天分表,
DROP TABLE IF EXISTS `eventfile`; CREATE TABLE `eventfile` ( `Fid` bigint(20) NOT NULL COMMENT '文件id。雪花id', `EventDeviceId` bigint(20) NOT NULL COMMENT '设备id', `EventJobId` bigint(20) NOT NULL COMMENT '任务id', `SkillId` bigint(20) NOT NULL DEFAULT '0' COMMENT '技能', `SavePath` varchar(512) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '保存路径。', `Results` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '结果', `DeleteStatus` tinyint(1) NOT NULL DEFAULT '0' COMMENT '删除状态', `CreateTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`Fid`) USING BTREE, KEY `idx_deviceId_jobId_createTime` (`EventDeviceId`,`EventJobId`,`CreateTime`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='事件';
在对应生成的实体类 eventfile 静态构造函数中加入分表策略,代码如下
static Eventfile() { // 按天分表 Meta.ShardPolicy = new TimeShardPolicy(nameof(Fid), Meta.Factory) { TablePolicy = "{0}_{1:yyyyMMdd}", Step = TimeSpan.FromDays(1), }; // 过滤器 UserModule、TimeModule、IPModule Meta.Modules.Add<TimeModule>(); }
当引用该实体用下面的代码进行插入操作时,会提示建表失败,
var eventFile = new Eventfile() { Fid = fid, EventDeviceId = ...., EventJobId = ..., SkillId = ..., SavePath = ..., Results = results }; eventFile.Insert();
日志如下,
01:59:12.731 6 Y 2 待检查数据表:eventfile_20230330 01:59:12.734 6 Y 2 创建表:eventfile_20230330(事件) 01:59:12.754 6 Y 2 Create Table If Not Exists eventfile_20230330( Fid BIGINT NOT NULL DEFAULT 0 COMMENT '文件id。雪花id', EventDeviceId BIGINT NOT NULL DEFAULT 0 COMMENT '设备id', EventJobId BIGINT NOT NULL DEFAULT 0 COMMENT '任务id', SkillId BIGINT NOT NULL DEFAULT 0 COMMENT '技能ID', SavePath VARCHAR(512) NOT NULL DEFAULT '' COMMENT '保存路径。', Results LONGTEXT NOT NULL DEFAULT '' COMMENT '结果', DeleteStatus TINYINT NOT NULL DEFAULT 0 COMMENT '删除状态', CreateTime DATETIME NOT NULL DEFAULT '0001-01-01' COMMENT '创建时间', Primary Key (Fid) ) DEFAULT CHARSET=utf8mb4; 01:59:12.776 6 Y 2 修改表CreateTable失败!BLOB, TEXT, GEOMETRY or JSON column 'Results' can't have a default value[SQL: Create Table If Not Exists eventfile_20230330( Fid BIGINT NOT NULL DEFAULT 0 COMMENT '文件id。雪花id', EventDeviceId BIGINT NOT NULL DEFAULT 0 COMMENT '设备id', EventJobId BIGINT NOT NULL DEFAULT 0 COMMENT '任务id', SkillId BIGINT NOT NULL DEFAULT 0 COMMENT '技能ID', SavePath VARCHAR(512) NOT NULL DEFAULT '' COMMENT '保存路径。', Results LONGTEXT NOT NULL DEFAULT '' COMMENT '结果', DeleteStatus TINYINT NOT NULL DEFAULT 0 COMMENT '删除状态', CreateTime DATETIME NOT NULL DEFAULT '0001-01-01' COMMENT '创建时间', Primary Key (Fid) ) DEFAULT CHARSET=utf8mb4; ][DB:Smart/MySql]
另外 insertAsync() 方法不会自动建表吗,上面的插入如果换用异步方法会提示 表 eventfile_20230330 不存在
感谢大佬开源如此强的项目!!
InsertAsync 等异步接口处于试验阶段,还没有长时间经验积累
很高兴能找到如此强大的项目,目前正在学习,使用过程中发现以下问题,
假设存在 eventfile 表,想实现按天分表,
在对应生成的实体类 eventfile 静态构造函数中加入分表策略,代码如下
当引用该实体用下面的代码进行插入操作时,会提示建表失败,
日志如下,
另外 insertAsync() 方法不会自动建表吗,上面的插入如果换用异步方法会提示 表 eventfile_20230330 不存在
感谢大佬开源如此强的项目!!