using JNPF; using JNPF.Extras.DatabaseAccessor.SqlSugar.Models; using JNPF.FriendlyException; using JNPF.JsonSerialization; using JNPF.Logging; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; namespace SqlSugar; /// /// SqlSugar 仓储实现类 /// /// public partial class SqlSugarRepository : SimpleClient, ISqlSugarRepository where TEntity : class, new() { /// /// 构造函数 /// /// public SqlSugarRepository(ISqlSugarClient context = null) : base(context) { // 获取数据库连接选项 ConnectionStringsOptions connectionStrings = App.GetConfig("ConnectionStrings", true); // 获取多租户选项 TenantOptions tenant = App.GetConfig("Tenant", true); var httpContext = App.HttpContext; base.Context = (SqlSugarScope)context; string tenantId = connectionStrings.ConfigId; string tenantDbName = string.Empty; if (httpContext?.GetEndpoint()?.Metadata?.GetMetadata() == null) { if (tenant.MultiTenancy && httpContext != null) { var connectionConfig = JSON.Deserialize(httpContext?.User.FindFirst("ConnectionConfig")?.Value); tenantId = connectionConfig.ConfigId; tenantDbName = connectionConfig.ConfigList.FirstOrDefault().ServiceName; if (!base.Context.AsTenant().IsAnyConnection(connectionConfig.ConfigId)) { base.Context.AsTenant().AddConnection(JNPFTenantExtensions.GetConfig(connectionConfig)); } base.Context = base.Context.AsTenant().GetConnectionScope(connectionConfig.ConfigId); if (!base.Context.Ado.IsValidConnection()) { throw Oops.Oh("数据库连接错误"); } } else { base.Context = base.Context.AsTenant().GetConnectionScope(tenantId); } } // 字段数据隔离 if (!"default".Equals(tenantId) && tenant.MultiTenancyType.Equals("COLUMN")) { base.Context.QueryFilter.AddTableFilter(it => it.TenantId == tenantDbName); base.Context.Aop.DataExecuting = (oldValue, entityInfo) => { if (entityInfo.PropertyName == "TenantId" && entityInfo.OperationType == DataFilterType.InsertByObject) { entityInfo.SetValue(tenantDbName); } }; } // 设置超时时间 base.Context.Ado.CommandTimeOut = 30; //base.Context.Aop.OnLogExecuted = (sql, pars) => //{ // var oldColor = Console.ForegroundColor; // Console.ForegroundColor = ConsoleColor.Green; // var finalSql = UtilMethods.GetSqlString(Context.CurrentConnectionConfig.DbType, sql, pars); // Console.WriteLine($"【{DateTime.Now.ToString("HH:mm:ss.fff")}——SQL执行完成】{Context.Ado.SqlExecutionTime.TotalMilliseconds} ms"); // Console.WriteLine(finalSql); // Console.ForegroundColor = oldColor; // if (Context.Ado.SqlExecutionTime.TotalMilliseconds > 3000) // { // Log.Warning($"慢查询: {Context.Ado.SqlExecutionTime.TotalMilliseconds}ms, SQL: " + finalSql); // } // Console.WriteLine(); // //App.PrintToMiniProfiler("SqlSugar", "Info", sql + "\r\n" + base.Context.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value))); //}; //base.Context.Aop.OnError = (ex) => //{ // Log.Error("SQL执行错误: " + UtilMethods.GetSqlString(base.Context.CurrentConnectionConfig.DbType, ex.Sql, (SugarParameter[])ex.Parametres)); // //App.PrintToMiniProfiler("SqlSugar", "Error", $"{ex.Message}{Environment.NewLine}{ex.Sql}{pars}{Environment.NewLine}"); //}; if (base.Context.CurrentConnectionConfig.DbType == DbType.Oracle) { base.Context.Aop.OnExecutingChangeSql = (sql, pars) => { if (pars != null) { foreach (var item in pars) { //如果是DbTppe=string设置成OracleDbType.Nvarchar2 item.IsNvarchar2 = true; } }; return new KeyValuePair(sql, pars); }; } } }