private void CreateDateTable(IVirtualTable virtualTable) { var virtualTableShardingConfig = virtualTable.ShardingConfig; var beginTime = virtualTableShardingConfig.BeginTableTimeStamp; var shardingModeEnum = virtualTableShardingConfig.ShardingMode; Func <long, long> nextTime = shardingModeEnum switch { ShardingModeEnum.Day => x => x.ConvertLongToTime().Date.AddDays(1).ConvertTimeToLong(), ShardingModeEnum.Week => x => x.ConvertLongToTime().Date.AddDays(7).ConvertTimeToLong(), ShardingModeEnum.Month => x => x.ConvertLongToTime().Date.AddMonths(1).ConvertTimeToLong(), ShardingModeEnum.Year => x => x.ConvertLongToTime().Date.AddYears(1).ConvertTimeToLong(), }; var nowTimeStamp = DateTime.Now.Date.ConvertTimeToLong(); if (beginTime > nowTimeStamp) { throw new ArgumentException("起始时间不正确无法生成正确的表名"); } var currentTimeStamp = beginTime; while (currentTimeStamp <= nowTimeStamp) { var tail = virtualTableShardingConfig.GetTableTailByField(currentTimeStamp); CreateTable(virtualTable, tail); //添加物理表 virtualTable.AddPhysicTable(new DefaultPhysicTable(virtualTable.GetOriginalTableName(), tail, virtualTable.EntityType)); currentTimeStamp = nextTime(currentTimeStamp); } }
private void CreateDataTable(IVirtualTable virtualTable) { var shardingConfig = virtualTable.ShardingConfig; foreach (var tail in virtualTable.GetTaleAllTails()) { if (NeedCreateTable(shardingConfig)) { try { _tableCreator.CreateTable(virtualTable.EntityType, tail); } catch (Exception) { _logger.LogWarning($"table :{virtualTable.GetOriginalTableName()}{shardingConfig.TailPrefix}{tail} will created"); } } //添加物理表 virtualTable.AddPhysicTable(new DefaultPhysicTable(virtualTable, tail)); } }