// Copyright (c) 2022-Now 少林寺驻北固山办事处大神父王喇嘛 // // SimpleAdmin 基于 Apache License Version 2.0 协议发布,可用于商业项目,但必须遵守以下补充条款: // 1.请不要删除和修改根目录下的LICENSE文件。 // 2.请不要删除和修改SimpleAdmin源码头部的版权声明。 // 3.分发源码时候,请注明软件出处 https://gitee.com/dotnetmoyu/SimpleAdmin // 4.基于本软件的作品,只能使用 SimpleAdmin 作为后台服务,除外情况不可商用且不允许二次分发或开源。 // 5.请不得将本软件应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为。 // 6.任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。 namespace SimpleAdmin.SqlSugar; /// /// SqlSugar通用功能 /// public static class SqlSugarUtils { /// /// 根据特性获取所有表信息 /// /// /// public static List GetTablesByAttribute() { var tables = new List();//结果集 // 获取实体表 var entityTypes = App.EffectiveTypes .Where(u => !u.IsInterface && !u.IsAbstract && u.IsClass && u.IsDefined(typeof(SugarTable), false))//有SugarTable特性 .Where(u => u.IsDefined(typeof(T), false));//具有指定特性 foreach (var entityType in entityTypes) { var tenantAttr = entityType.GetCustomAttribute();//获取多租户特性 var configId = tenantAttr.configId.ToString();//获取租户Id var connection = DbContext.DB.GetConnection(tenantAttr.configId.ToString());//根据租户ID获取连接信息 var entityInfo = connection.EntityMaintenance.GetEntityInfo(entityType);//获取实体信息 if (entityInfo != null) { var columns = GetTableColumns(configId, entityInfo.DbTableName);//获取字段信息 tables.Add(new SqlSugarTableInfo { TableName = entityInfo.DbTableName, EntityName = entityInfo.EntityName, TableDescription = entityInfo.TableDescription, ConfigId = configId, Columns = columns }); } } return tables; } /// /// 获取字段信息 /// /// /// /// public static List GetTableColumns(string configId, string tableName) { var columns = new List();//结果集 var connection = DbContext.DB.GetConnection(configId); var dbColumnInfos = connection.DbMaintenance.GetColumnInfosByTableName(tableName);//根据表名获取表信息 if (dbColumnInfos != null) { //遍历字段获取信息 dbColumnInfos.ForEach(it => { if (it.DbColumnName.Contains("_"))//如果有下划线,转换一下 { var column = "";//新的字段值 var columnList = it.DbColumnName.Split('_');//根据下划线分割 columnList.ForEach(it => { column += StringHelper.FirstCharToUpper(it);//首字母大写 }); it.DbColumnName = column;//赋值给数据库字段 } else { it.DbColumnName = StringHelper.FirstCharToUpper(it.DbColumnName);//首字母大写 } columns.Add(new SqlSugarColumnInfo { ColumnName = it.DbColumnName, IsPrimaryKey = it.IsPrimarykey, ColumnDescription = it.ColumnDescription, DataType = it.DataType }); }); } return columns; } /// /// 数据库字段类型转.NET类型 /// /// 字段类型 /// public static string ConvertDataType(string dataType) { switch (dataType) { case "text": case "varchar": case "char": case "nvarchar": case "nchar": case "blob": case "longtext": case "nclob": return "string"; case "int": case "mediumint": return "int"; case "smallint": return "Int16"; case "tinyint": return "byte"; case "bigint": case "integer"://sqlite数据库 return "long"; case "bit": case "boolean": return "bool"; case "money": case "smallmoney": case "numeric": case "decimal": return "decimal"; case "real": return "Single"; case "datetime": case "smalldatetime": case "timestamp": case "date": case "year": case "time": return "DateTime"; case "float": case "double": return "double"; case "image": case "binary": case "varbinary": return "byte[]"; case "uniqueidentifier": return "Guid"; default: return "string"; } } /// /// 数据类型转显示类型 /// /// /// public static string DataTypeToEff(string dataType) { return dataType switch { "string" => EffTypeConst.INPUT, "int" => EffTypeConst.INPUT_NUMBER, "long" => EffTypeConst.INPUT, "float" => EffTypeConst.INPUT, "double" => EffTypeConst.INPUT, "decimal" => EffTypeConst.INPUT, "bool" => EffTypeConst.SWITCH, "Guid" => EffTypeConst.INPUT, "DateTime" => EffTypeConst.DATEPICKER, _ => EffTypeConst.INPUT }; } /// /// 是否通用字段 /// /// 字段名 /// public static bool IsCommonColumn(string columnName) { var columnList = new List { nameof(BaseEntity.CreateTime), nameof(BaseEntity.UpdateTime), nameof(BaseEntity.CreateUserId), nameof(BaseEntity.CreateUser), nameof(BaseEntity.UpdateUserId), nameof(BaseEntity.UpdateUser), nameof(BaseEntity.IsDelete), nameof(DataEntityBase.CreateOrgId), nameof(PrimaryKeyEntity.ExtJson) }; return columnList.Contains(columnName); } }