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

View File

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