切换数据库时打印sql,增加获取主键的接口

This commit is contained in:
2023-03-28 18:04:15 +08:00
parent 975744d5ec
commit f9e3a01602
5 changed files with 1161 additions and 1122 deletions

View File

@@ -42,26 +42,24 @@ public static class ConfigureSqlSugarExtensions
// // 设置超时时间
// db.Ado.CommandTimeOut = 30;
// // 打印SQL语句
// db.Aop.OnLogExecuting = (sql, pars) =>
// db.Aop.OnLogExecuted = (sql, pars) =>
// {
// var oldColor = Console.ForegroundColor;
// Console.ForegroundColor = ConsoleColor.Green;
// var finalSql = UtilMethods.GetSqlString(db.CurrentConnectionConfig.DbType, sql, pars);
// Console.WriteLine($"【{DateTime.Now.ToString("HH:mm:ss.fff")}——SQL执行完成】{db.Ado.SqlExecutionTime.TotalMilliseconds} ms");
// Console.WriteLine(finalSql);
// Console.ForegroundColor = oldColor;
// if (db.Ado.SqlExecutionTime.TotalMilliseconds > 3000)
// {
// var oldColor = Console.ForegroundColor;
// Console.ForegroundColor = ConsoleColor.Green;
// var finalSql = UtilMethods.GetSqlString(db.CurrentConnectionConfig.DbType, sql, pars);
// Console.WriteLine($"【{DateTime.Now.ToString("HH:mm:ss.fff")}——SQL执行完成】{db.Ado.SqlExecutionTime.TotalMilliseconds} ms");
// Console.WriteLine(finalSql);
// Console.ForegroundColor = oldColor;
// if (db.Ado.SqlExecutionTime.TotalMilliseconds > 3000)
// {
// Log.Warning($"慢查询: {db.Ado.SqlExecutionTime.TotalMilliseconds}ms, SQL: " + finalSql);
// }
// Console.WriteLine();
// };
// Log.Warning($"慢查询: {db.Ado.SqlExecutionTime.TotalMilliseconds}ms, SQL: " + finalSql);
// }
// Console.WriteLine();
// };
// db.Aop.OnError = (ex) =>
// {
// Log.Error(UtilMethods.GetSqlString(db.CurrentConnectionConfig.DbType, ex.Sql, (SugarParameter[])ex.Parametres));
// };
// {
// Log.Error(UtilMethods.GetSqlString(db.CurrentConnectionConfig.DbType, ex.Sql, (SugarParameter[])ex.Parametres));
// };
//});
});
services.AddConfigurableOptions<ConnectionStringsOptions>();

File diff suppressed because it is too large Load Diff

View File

@@ -15,247 +15,255 @@ namespace JNPF.Common.Core.Manager;
/// </summary>
public interface IDataBaseManager
{
/// <summary>
/// 获取多租户Link.
/// </summary>
/// <param name="tenantId">租户ID.</param>
/// <param name="tenantName">租户数据库.</param>
/// <returns>租户的DBLink实体对象.</returns>
DbLinkEntity GetTenantDbLink(string tenantId, string tenantName);
/// <summary>
/// 获取多租户Link.
/// </summary>
/// <param name="tenantId">租户ID.</param>
/// <param name="tenantName">租户数据库.</param>
/// <returns>租户的DBLink实体对象.</returns>
DbLinkEntity GetTenantDbLink(string tenantId, string tenantName);
/// <summary>
/// 数据库切换.
/// </summary>
/// <param name="link">数据连接.</param>
/// <returns>切库后的SqlSugarClient.</returns>
SqlSugarScope ChangeDataBase(DbLinkEntity link);
/// <summary>
/// 数据库切换.
/// </summary>
/// <param name="link">数据连接.</param>
/// <returns>切库后的SqlSugarClient.</returns>
SqlSugarScope ChangeDataBase(DbLinkEntity link);
/// <summary>
/// 执行Sql(查询).
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="strSql">sql语句.</param>
/// <returns></returns>
Task<int> ExecuteSql(DbLinkEntity link, string strSql);
/// <summary>
/// 执行Sql(查询).
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="strSql">sql语句.</param>
/// <returns></returns>
Task<int> ExecuteSql(DbLinkEntity link, string strSql);
/// <summary>
/// 条件动态过滤.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="strSql">sql语句.</param>
/// <returns>条件是否成立.</returns>
bool WhereDynamicFilter(DbLinkEntity link, string strSql);
/// <summary>
/// 条件动态过滤.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="strSql">sql语句.</param>
/// <returns>条件是否成立.</returns>
bool WhereDynamicFilter(DbLinkEntity link, string strSql);
/// <summary>
/// 执行Sql(新增、修改).
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="table">表名.</param>
/// <param name="dicList">数据.</param>
/// <param name="primaryField">主键字段.</param>
/// <returns></returns>
Task<int> ExecuteSql(DbLinkEntity link, string table, List<Dictionary<string, object>> dicList, string primaryField = "");
/// <summary>
/// 执行Sql(新增、修改).
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="table">表名.</param>
/// <param name="dicList">数据.</param>
/// <param name="primaryField">主键字段.</param>
/// <returns></returns>
Task<int> ExecuteSql(DbLinkEntity link, string table, List<Dictionary<string, object>> dicList, string primaryField = "");
/// <summary>
/// 执行Sql 新增 并返回自增长Id.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="table">表名.</param>
/// <param name="dicList">数据.</param>
/// <param name="primaryField">主键字段.</param>
/// <returns></returns>
Task<int> ExecuteReturnIdentityAsync(DbLinkEntity link, string table, List<Dictionary<string, object>> dicList, string primaryField = "");
/// <summary>
/// 执行Sql 新增 并返回自增长Id.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="table">表名.</param>
/// <param name="dicList">数据.</param>
/// <param name="primaryField">主键字段.</param>
/// <returns></returns>
Task<int> ExecuteReturnIdentityAsync(DbLinkEntity link, string table, List<Dictionary<string, object>> dicList, string primaryField = "");
/// <summary>
/// 创建表.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="tableModel">表对象.</param>
/// <param name="tableFieldList">字段对象.</param>
/// <returns></returns>
Task<bool> Create(DbLinkEntity link, DbTableModel tableModel, List<DbTableFieldModel> tableFieldList);
/// <summary>
/// 创建表.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="tableModel">表对象.</param>
/// <param name="tableFieldList">字段对象.</param>
/// <returns></returns>
Task<bool> Create(DbLinkEntity link, DbTableModel tableModel, List<DbTableFieldModel> tableFieldList);
/// <summary>
/// sqlsugar添加表字段.
/// </summary>
/// <param name="tableName">表名.</param>
/// <param name="tableFieldList">表字段集合.</param>
void AddTableColumn(DbLinkEntity link ,string tableName, List<DbTableFieldModel> tableFieldList);
/// <summary>
/// sqlsugar添加表字段.
/// </summary>
/// <param name="tableName">表名.</param>
/// <param name="tableFieldList">表字段集合.</param>
void AddTableColumn(DbLinkEntity link, string tableName, List<DbTableFieldModel> tableFieldList);
/// <summary>
/// 删除表.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="table">表名.</param>
/// <returns></returns>
bool Delete(DbLinkEntity link, string table);
/// <summary>
/// 删除表.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="table">表名.</param>
/// <returns></returns>
bool Delete(DbLinkEntity link, string table);
/// <summary>
/// 修改表.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="oldTable">旧表名称.</param>
/// <param name="tableModel">表对象.</param>
/// <param name="tableFieldList">字段对象.</param>
/// <returns></returns>
Task<bool> Update(DbLinkEntity link, string oldTable, DbTableModel tableModel, List<DbTableFieldModel> tableFieldList);
/// <summary>
/// 修改表.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="oldTable">旧表名称.</param>
/// <param name="tableModel">表对象.</param>
/// <param name="tableFieldList">字段对象.</param>
/// <returns></returns>
Task<bool> Update(DbLinkEntity link, string oldTable, DbTableModel tableModel, List<DbTableFieldModel> tableFieldList);
/// <summary>
/// 根据链接获取分页数据.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="strSql">Sql语句.</param>
/// <param name="pageInput">页数.</param>
/// <param name="columnDesign">列配置.</param>
/// <param name="dataPermissions">数据权限.</param>
/// <param name="outColumnName">输出列名称.</param>
/// <returns></returns>
PageResult<Dictionary<string, object>> GetInterFaceData(DbLinkEntity link, string strSql, VisualDevModelListQueryInput pageInput, MainBeltViceQueryModel columnDesign, List<IConditionalModel> dataPermissions, Dictionary<string, string> outColumnName = null);
/// <summary>
/// 根据链接获取分页数据.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="strSql">Sql语句.</param>
/// <param name="pageInput">页数.</param>
/// <param name="columnDesign">列配置.</param>
/// <param name="dataPermissions">数据权限.</param>
/// <param name="outColumnName">输出列名称.</param>
/// <returns></returns>
PageResult<Dictionary<string, object>> GetInterFaceData(DbLinkEntity link, string strSql, VisualDevModelListQueryInput pageInput, MainBeltViceQueryModel columnDesign, List<IConditionalModel> dataPermissions, Dictionary<string, string> outColumnName = null);
/// <summary>
/// 表是否存在.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="table">表名.</param>
/// <returns></returns>
bool IsAnyTable(DbLinkEntity link, string table);
/// <summary>
/// 表是否存在.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="table">表名.</param>
/// <returns></returns>
bool IsAnyTable(DbLinkEntity link, string table);
/// <summary>
/// 表字段是否存在.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="table">表名.</param>
/// <param name="column">表字段名.</param>
/// <returns></returns>
bool IsAnyColumn(DbLinkEntity link, string table, string column);
/// <summary>
/// 表字段是否存在.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="table">表名.</param>
/// <param name="column">表字段名.</param>
/// <returns></returns>
bool IsAnyColumn(DbLinkEntity link, string table, string column);
/// <summary>
/// 获取表字段列表.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="tableName">表名.</param>
/// <returns></returns>
List<DbTableFieldModel> GetFieldList(DbLinkEntity? link, string? tableName);
/// <summary>
/// 获取表字段列表.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="tableName">表名.</param>
/// <returns></returns>
List<DbTableFieldModel> GetFieldList(DbLinkEntity? link, string? tableName);
/// <summary>
/// 获取表数据.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="tableName">表名.</param>
/// <returns></returns>
DataTable GetData(DbLinkEntity link, string tableName);
/// <summary>
/// 获取表的主键
/// </summary>
/// <param name="link"></param>
/// <param name="tableName"></param>
/// <returns></returns>
List<string> GetPrimaries(DbLinkEntity? link, string tableName);
/// <summary>
/// 根据链接获取数据.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="strSql">Sql语句.</param>
/// <param name="parameters">参数.</param>
/// <returns></returns>
DataTable GetInterFaceData(DbLinkEntity link, string strSql, params SugarParameter[] parameters);
/// <summary>
/// 获取数据.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="tableName">表名.</param>
/// <returns></returns>
DataTable GetData(DbLinkEntity link, string tableName);
/// <summary>
/// 获取表信息.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="tableName">表名.</param>
/// <returns></returns>
DatabaseTableInfoOutput GetDataBaseTableInfo(DbLinkEntity link, string tableName);
/// <summary>
/// 根据链接获取数据.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="strSql">Sql语句.</param>
/// <param name="parameters">参数.</param>
/// <returns></returns>
DataTable GetInterFaceData(DbLinkEntity link, string strSql, params SugarParameter[] parameters);
/// <summary>
/// 获取数据库表信息.
/// </summary>
/// <param name="link">数据连接.</param>
/// <returns></returns>
List<DatabaseTableListOutput> GetDBTableList(DbLinkEntity link);
/// <summary>
/// 获取表信息.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="tableName">表名.</param>
/// <returns></returns>
DatabaseTableInfoOutput GetDataBaseTableInfo(DbLinkEntity link, string tableName);
/// <summary>
/// 获取数据库表信息.
/// </summary>
/// <param name="link">数据连接.</param>
/// <returns></returns>
List<DbTableInfo> GetTableInfos(DbLinkEntity link);
/// <summary>
/// 获取数据库表信息.
/// </summary>
/// <param name="link">数据连接.</param>
/// <returns></returns>
List<DatabaseTableListOutput> GetDBTableList(DbLinkEntity link);
/// <summary>
/// 获取数据表分页(SQL语句).
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="dbSql">数据SQL.</param>
/// <param name="pageIndex">页数.</param>
/// <param name="pageSize">条数.</param>
/// <returns></returns>
Task<dynamic> GetDataTablePage(DbLinkEntity link, string dbSql, int pageIndex, int pageSize);
/// <summary>
/// 获取数据库表信息.
/// </summary>
/// <param name="link">数据连接.</param>
/// <returns></returns>
List<DbTableInfo> GetTableInfos(DbLinkEntity link);
/// <summary>
/// 获取数据表分页(实体).
/// </summary>
/// <typeparam name="TEntity">T.</typeparam>
/// <param name="link">数据连接.</param>
/// <param name="pageIndex">页数.</param>
/// <param name="pageSize">条数.</param>
/// <returns></returns>
Task<List<TEntity>> GetDataTablePage<TEntity>(DbLinkEntity link, int pageIndex, int pageSize);
/// <summary>
/// 获取数据表分页(SQL语句).
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="dbSql">数据SQL.</param>
/// <param name="pageIndex">页数.</param>
/// <param name="pageSize">条数.</param>
/// <returns></returns>
Task<dynamic> GetDataTablePage(DbLinkEntity link, string dbSql, int pageIndex, int pageSize);
/// <summary>
/// 使用存储过程.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="stored">存储过程名称.</param>
/// <param name="parameters">数.</param>
void UseStoredProcedure(DbLinkEntity link, string stored, List<SugarParameter> parameters);
/// <summary>
/// 获取数据表分页(实体).
/// </summary>
/// <typeparam name="TEntity">T.</typeparam>
/// <param name="link">数据连接.</param>
/// <param name="pageIndex">数.</param>
/// <param name="pageSize">条数.</param>
/// <returns></returns>
Task<List<TEntity>> GetDataTablePage<TEntity>(DbLinkEntity link, int pageIndex, int pageSize);
/// <summary>
/// 测试数据库连接.
/// </summary>
/// <param name="link">数据连接.</param>
/// <returns></returns>
bool IsConnection(DbLinkEntity link);
/// <summary>
/// 使用存储过程.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="stored">存储过程名称.</param>
/// <param name="parameters">参数.</param>
void UseStoredProcedure(DbLinkEntity link, string stored, List<SugarParameter> parameters);
/// <summary>
/// 同步数据.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="dt">同步数据.</param>
/// <param name="table">表.</param>
/// <returns></returns>
Task<bool> SyncData(DbLinkEntity link, DataTable dt, string table);
/// <summary>
/// 测试数据库连接.
/// </summary>
/// <param name="link">数据连接.</param>
/// <returns></returns>
bool IsConnection(DbLinkEntity link);
/// <summary>
/// 同步表操作.
/// </summary>
/// <param name="linkFrom">数据.</param>
/// <param name="linkTo">目前数据.</param>
/// <param name="table">表名称.</param>
/// <param name="type">操作类型.</param>
/// <param name="fieldType">数据类型.</param>
void SyncTable(DbLinkEntity linkFrom, DbLinkEntity linkTo, string table, int type, Dictionary<string, string> fieldType);
/// <summary>
/// 同步数据.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="dt">同步数据.</param>
/// <param name="table">表.</param>
/// <returns></returns>
Task<bool> SyncData(DbLinkEntity link, DataTable dt, string table);
/// <summary>
/// 视图数据类型转换.
/// </summary>
/// <param name="fields">字段数据.</param>
/// <param name="databaseType">数据库类型.</param>
List<TableFieldOutput> ViewDataTypeConversion(List<TableFieldOutput> fields, SqlSugar.DbType databaseType);
/// <summary>
/// 同步表操作.
/// </summary>
/// <param name="linkFrom">原数据.</param>
/// <param name="linkTo">目前数据库.</param>
/// <param name="table">表名称.</param>
/// <param name="type">操作类型.</param>
/// <param name="fieldType">数据类型.</param>
void SyncTable(DbLinkEntity linkFrom, DbLinkEntity linkTo, string table, int type, Dictionary<string, string> fieldType);
/// <summary>
/// 转换数据类型.
/// </summary>
/// <param name="dbType">数据库类型.</param>
/// <returns></returns>
SqlSugar.DbType ToDbType(string dbType);
/// <summary>
/// 视图数据类型转换.
/// </summary>
/// <param name="fields">字段数据.</param>
/// <param name="databaseType">数据库类型.</param>
List<TableFieldOutput> ViewDataTypeConversion(List<TableFieldOutput> fields, SqlSugar.DbType databaseType);
/// <summary>
/// 转换连接字符串.
/// </summary>
/// <param name="dbLinkEntity">数据连接.</param>
/// <returns></returns>
string ToConnectionString(DbLinkEntity dbLinkEntity);
/// <summary>
/// 转换数据库类型.
/// </summary>
/// <param name="dbType">数据库类型.</param>
/// <returns></returns>
SqlSugar.DbType ToDbType(string dbType);
/// <summary>
/// 执行增删改sql.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="strSql">sql语句.</param>
/// <param name="parameters">参数.</param>
void ExecuteCommand(DbLinkEntity link, string strSql, params SugarParameter[] parameters);
/// <summary>
/// 转换连接字符串.
/// </summary>
/// <param name="dbLinkEntity">数据连接.</param>
/// <returns></returns>
string ToConnectionString(DbLinkEntity dbLinkEntity);
/// <summary>
/// 执行增删改sql.
/// </summary>
/// <param name="link">数据连接.</param>
/// <param name="strSql">sql语句.</param>
/// <param name="parameters">参数.</param>
void ExecuteCommand(DbLinkEntity link, string strSql, params SugarParameter[] parameters);
}

View File

@@ -72,7 +72,6 @@ where TEntity : class, new()
base.Context.Ado.CommandTimeOut = 30;
base.Context.Aop.OnLogExecuted = (sql, pars) =>
{
// 在控制台输出sql语句
var oldColor = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.Green;
var finalSql = UtilMethods.GetSqlString(Context.CurrentConnectionConfig.DbType, sql, pars);

View File

@@ -1732,10 +1732,13 @@ public class RunService : IRunService, ITransient
/// <returns></returns>
private string GetPrimary(DbLinkEntity link, string MainTableName)
{
List<DbTableFieldModel>? tableList = _databaseService.GetFieldList(link, MainTableName); // 获取主表所有列
DbTableFieldModel? mainPrimary = tableList.Find(t => t.primaryKey); // 主表主键
if (mainPrimary == null || mainPrimary.IsNullOrEmpty()) throw Oops.Oh(ErrorCode.D1402); // 主表未设置主键
return mainPrimary.field;
var keys = _databaseService.GetPrimaries(link, MainTableName);
if (keys.Count < 1) throw Oops.Oh(ErrorCode.D1402); // 主表未设置主键
return keys.First();
//List<DbTableFieldModel>? tableList = _databaseService.GetFieldList(link, MainTableName); // 获取主表所有列
//DbTableFieldModel? mainPrimary = tableList.Find(t => t.primaryKey); // 主表主键
//if (mainPrimary == null || mainPrimary.IsNullOrEmpty()) throw Oops.Oh(ErrorCode.D1402); // 主表未设置主键
//return mainPrimary.field;
}
/// <summary>