mysql 分表问题,自定义分表格式xxxx_yyyyMM 返回
我在配置分表上使用xxx_ {yyyyMM} ,mssql上使用没问题,但如果多库的话,mysql 一直查询都是--no table
[SplitTable(SplitType.Month, typeof(yyyyMMService))]
[SugarTable("xxx_{yyyyMM}", "xxx表")]
yyyyMMService 用的就是论坛内的
因为 XXX_{yyyyMM} 跟实际表名不一致 mysql 全是小写 xxxx_{yyyymm} 返回表名就是小写
如果在 链接位置配置 直接转小写,表能找到,但 _{yyyyMM} 又成问题了
ConfigureExternalServices = new ConfigureExternalServices()
{
EntityNameService = (c, p) =>
{
//if (item.DbType != DbType.SqlServer)
//{
// p.DbTableName = p.DbTableName?.ToLower();
//}
},
热忱回答(2)
-
fate sta VIP0
1周前--no table
是你查询没找到表
,检查自定义分表的 重几个方法,获取的表名是否正确。
0 回复 -
一叶知秋 VIP0
1周前试了 代码中是 XXX_{yyyyMM} , mysql 查询出来是 xxx_202604
所以在 这个就查不到匹配不上(下发有注释)
publicclassyyyyMMService : ISplitTableService{publicList<SplitTableInfo> GetAllTables(ISqlSugarClient db, EntityInfo EntityInfo, List<DbTableInfo> tableInfos){List<SplitTableInfo> result =newList<SplitTableInfo>();foreach(varitemintableInfos){// EntityInfo.DbTableName 获取到时配置好的 XXX_{yyyyMM}vartableName = EntityInfo.DbTableName.Replace("_{yyyyMM}","");// item.Name 是 xxx_202604if(EntityInfo.DbTableName.Contains("_{yyyyMM}") &&item.Name.Contains(tableName))// MySpliteTest_202204 这种格式的表{SplitTableInfo tableInfo =newSplitTableInfo();tableInfo.TableName =item.Name;varvalue = Regex.Match(item.Name,@"\d{6}$").Value;if(value!=null){value=value.Insert(4,"-");tableInfo.Date = Convert.ToDateTime(value +"-01");//tableInfo.String = null; Time table, it doesn't work//tableInfo.Long = null; Time table, it doesn't workresult.Add(tableInfo);}}}returnresult;}publicobjectGetFieldValue(ISqlSugarClient db, EntityInfo entityInfo, SplitType splitType,objectentityValue){varsplitColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyInfo.GetCustomAttribute<SplitFieldAttribute>() !=null);if(splitColumn ==null){returndb.GetDate();}else{varvalue = splitColumn.PropertyInfo.GetValue(entityValue,null);returnvalue;}}publicstringGetTableName(ISqlSugarClient db, EntityInfo EntityInfo){returnEntityInfo.DbTableName.Replace("{yyyyMM}", DateTime.Now.ToString("yyyyMM")) ;}publicstringGetTableName(ISqlSugarClient db, EntityInfo EntityInfo, SplitType type){returnEntityInfo.DbTableName.Replace("{yyyyMM}", DateTime.Now.ToString("yyyyMM"));}publicstringGetTableName(ISqlSugarClient db, EntityInfo entityInfo, SplitType splitType,objectfieldValue){returnentityInfo.DbTableName.Replace("{yyyyMM}",Convert.ToDateTime(fieldValue).ToString("yyyyMM"));}}0 回复