Преглед изворни кода

解决重复初始化SqlSugarScope配置问题(严重影响性能)

syxdevcode пре 3 година
родитељ
комит
dcd238d7d0
1 измењених фајлова са 108 додато и 88 уклоњено
  1. 108 88
      Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs

+ 108 - 88
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarSetup.cs

@@ -25,106 +25,126 @@ public static class SqlSugarSetup
             config.ConfigureExternalServices = configureExternalServices;
         });
 
+        // 初始化SqlSugarScope配置
+        var initConfig = false;
+
         SqlSugarScope sqlSugar = new(dbOptions.ConnectionConfigs, db =>
         {
-            dbOptions.ConnectionConfigs.ForEach(config =>
+            if (!initConfig)
             {
-                var dbProvider = db.GetConnectionScope((string)config.ConfigId);
+                dbOptions.ConnectionConfigs.ForEach(config =>
+                {
+                    var dbProvider = db.GetConnectionScope((string)config.ConfigId);
 
-                // 设置超时时间
-                dbProvider.Ado.CommandTimeOut = 30;
+                    // 设置超时时间
+                    dbProvider.Ado.CommandTimeOut = 30;
 
-                // 打印SQL语句
-                dbProvider.Aop.OnLogExecuting = (sql, pars) =>
-                {
-                    if (sql.StartsWith("SELECT", StringComparison.OrdinalIgnoreCase))
-                        Console.ForegroundColor = ConsoleColor.Green;
-                    if (sql.StartsWith("UPDATE", StringComparison.OrdinalIgnoreCase) || sql.StartsWith("INSERT", StringComparison.OrdinalIgnoreCase))
-                        Console.ForegroundColor = ConsoleColor.White;
-                    if (sql.StartsWith("DELETE", StringComparison.OrdinalIgnoreCase))
-                        Console.ForegroundColor = ConsoleColor.Blue;
-                    Console.WriteLine("【" + DateTime.Now + "——执行SQL】\r\n" + UtilMethods.GetSqlString(config.DbType, sql, pars) + "\r\n");
-                    App.PrintToMiniProfiler("SqlSugar", "Info", sql + "\r\n" + db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
-                };
-                dbProvider.Aop.OnError = (ex) =>
-                {
-                    Console.ForegroundColor = ConsoleColor.Red;
-                    var pars = db.Utilities.SerializeObject(((SugarParameter[])ex.Parametres).ToDictionary(it => it.ParameterName, it => it.Value));
-                    Console.WriteLine("【" + DateTime.Now + "——错误SQL】\r\n" + UtilMethods.GetSqlString(config.DbType, ex.Sql, (SugarParameter[])ex.Parametres) + "\r\n");
-                    App.PrintToMiniProfiler("SqlSugar", "Error", $"{ex.Message}{Environment.NewLine}{ex.Sql}{pars}{Environment.NewLine}");
-                };
-
-                // 数据审计
-                dbProvider.Aop.DataExecuting = (oldValue, entityInfo) =>
-                {
-                    // 新增操作
-                    if (entityInfo.OperationType == DataFilterType.InsertByObject)
+                    // 打印SQL语句
+                    dbProvider.Aop.OnLogExecuting = (sql, pars) =>
                     {
-                        // 主键(long类型)且没有值的---赋值雪花Id
-                        if (entityInfo.EntityColumnInfo.IsPrimarykey && entityInfo.EntityColumnInfo.PropertyInfo.PropertyType == typeof(long))
-                        {
-                            var id = entityInfo.EntityColumnInfo.PropertyInfo.GetValue(entityInfo.EntityValue);
-                            if (id == null || (long)id == 0)
-                                entityInfo.SetValue(Yitter.IdGenerator.YitIdHelper.NextId());
-                        }
-                        if (entityInfo.PropertyName == "CreateTime")
-                            entityInfo.SetValue(DateTime.Now);
-                        if (App.User != null)
+                        if (sql.StartsWith("SELECT", StringComparison.OrdinalIgnoreCase))
+                            Console.ForegroundColor = ConsoleColor.Green;
+                        if (sql.StartsWith("UPDATE", StringComparison.OrdinalIgnoreCase) ||
+                            sql.StartsWith("INSERT", StringComparison.OrdinalIgnoreCase))
+                            Console.ForegroundColor = ConsoleColor.White;
+                        if (sql.StartsWith("DELETE", StringComparison.OrdinalIgnoreCase))
+                            Console.ForegroundColor = ConsoleColor.Blue;
+                        Console.WriteLine("【" + DateTime.Now + "——执行SQL】\r\n" +
+                                          UtilMethods.GetSqlString(config.DbType, sql, pars) + "\r\n");
+                        App.PrintToMiniProfiler("SqlSugar", "Info",
+                            sql + "\r\n" +
+                            db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
+                    };
+                    dbProvider.Aop.OnError = (ex) =>
+                    {
+                        Console.ForegroundColor = ConsoleColor.Red;
+                        var pars = db.Utilities.SerializeObject(
+                            ((SugarParameter[])ex.Parametres).ToDictionary(it => it.ParameterName, it => it.Value));
+                        Console.WriteLine("【" + DateTime.Now + "——错误SQL】\r\n" +
+                                          UtilMethods.GetSqlString(config.DbType, ex.Sql,
+                                              (SugarParameter[])ex.Parametres) + "\r\n");
+                        App.PrintToMiniProfiler("SqlSugar", "Error",
+                            $"{ex.Message}{Environment.NewLine}{ex.Sql}{pars}{Environment.NewLine}");
+                    };
+
+                    // 数据审计
+                    dbProvider.Aop.DataExecuting = (oldValue, entityInfo) =>
+                    {
+                        // 新增操作
+                        if (entityInfo.OperationType == DataFilterType.InsertByObject)
                         {
-                            if (entityInfo.PropertyName == "TenantId")
+                            // 主键(long类型)且没有值的---赋值雪花Id
+                            if (entityInfo.EntityColumnInfo.IsPrimarykey &&
+                                entityInfo.EntityColumnInfo.PropertyInfo.PropertyType == typeof(long))
+                            {
+                                var id = entityInfo.EntityColumnInfo.PropertyInfo.GetValue(entityInfo.EntityValue);
+                                if (id == null || (long)id == 0)
+                                    entityInfo.SetValue(Yitter.IdGenerator.YitIdHelper.NextId());
+                            }
+
+                            if (entityInfo.PropertyName == "CreateTime")
+                                entityInfo.SetValue(DateTime.Now);
+                            if (App.User != null)
                             {
-                                var tenantId = ((dynamic)entityInfo.EntityValue).TenantId;
-                                if (tenantId == null || tenantId == 0)
-                                    entityInfo.SetValue(App.User.FindFirst(ClaimConst.TenantId)?.Value);
+                                if (entityInfo.PropertyName == "TenantId")
+                                {
+                                    var tenantId = ((dynamic)entityInfo.EntityValue).TenantId;
+                                    if (tenantId == null || tenantId == 0)
+                                        entityInfo.SetValue(App.User.FindFirst(ClaimConst.TenantId)?.Value);
+                                }
+
+                                if (entityInfo.PropertyName == "CreateUserId")
+                                    entityInfo.SetValue(App.User.FindFirst(ClaimConst.UserId)?.Value);
+                                if (entityInfo.PropertyName == "CreateOrgId")
+                                    entityInfo.SetValue(App.User.FindFirst(ClaimConst.OrgId)?.Value);
                             }
-                            if (entityInfo.PropertyName == "CreateUserId")
-                                entityInfo.SetValue(App.User.FindFirst(ClaimConst.UserId)?.Value);
-                            if (entityInfo.PropertyName == "CreateOrgId")
-                                entityInfo.SetValue(App.User.FindFirst(ClaimConst.OrgId)?.Value);
                         }
-                    }
-                    // 更新操作
-                    if (entityInfo.OperationType == DataFilterType.UpdateByObject)
-                    {
-                        if (entityInfo.PropertyName == "UpdateTime")
-                            entityInfo.SetValue(DateTime.Now);
-                        if (entityInfo.PropertyName == "UpdateUserId")
-                            entityInfo.SetValue(App.User?.FindFirst(ClaimConst.UserId)?.Value);
-                    }
-                };
-
-                // 差异日志
-                dbProvider.Aop.OnDiffLogEvent = async u =>
-                {
-                    if (!dbOptions.EnableDiffLog) return;
-                    var LogDiff = new SysLogDiff
+
+                        // 更新操作
+                        if (entityInfo.OperationType == DataFilterType.UpdateByObject)
+                        {
+                            if (entityInfo.PropertyName == "UpdateTime")
+                                entityInfo.SetValue(DateTime.Now);
+                            if (entityInfo.PropertyName == "UpdateUserId")
+                                entityInfo.SetValue(App.User?.FindFirst(ClaimConst.UserId)?.Value);
+                        }
+                    };
+
+                    // 差异日志
+                    dbProvider.Aop.OnDiffLogEvent = async u =>
                     {
-                        // 操作后记录(字段描述、列名、值、表名、表描述)
-                        AfterData = JsonConvert.SerializeObject(u.AfterData),
-                        // 操作前记录(字段描述、列名、值、表名、表描述)
-                        BeforeData = JsonConvert.SerializeObject(u.BeforeData),
-                        // 传进来的对象
-                        BusinessData = JsonConvert.SerializeObject(u.BusinessData),
-                        // 枚举(insert、update、delete)
-                        DiffType = u.DiffType.ToString(),
-                        Sql = UtilMethods.GetSqlString(config.DbType, u.Sql, u.Parameters),
-                        Parameters = JsonConvert.SerializeObject(u.Parameters),
-                        Duration = u.Time == null ? 0 : (long)u.Time.Value.TotalMilliseconds
+                        if (!dbOptions.EnableDiffLog) return;
+                        var LogDiff = new SysLogDiff
+                        {
+                            // 操作后记录(字段描述、列名、值、表名、表描述)
+                            AfterData = JsonConvert.SerializeObject(u.AfterData),
+                            // 操作前记录(字段描述、列名、值、表名、表描述)
+                            BeforeData = JsonConvert.SerializeObject(u.BeforeData),
+                            // 传进来的对象
+                            BusinessData = JsonConvert.SerializeObject(u.BusinessData),
+                            // 枚举(insert、update、delete)
+                            DiffType = u.DiffType.ToString(),
+                            Sql = UtilMethods.GetSqlString(config.DbType, u.Sql, u.Parameters),
+                            Parameters = JsonConvert.SerializeObject(u.Parameters),
+                            Duration = u.Time == null ? 0 : (long)u.Time.Value.TotalMilliseconds
+                        };
+                        await db.GetConnectionScope(SqlSugarConst.ConfigId).Insertable(LogDiff).ExecuteCommandAsync();
+                        Console.ForegroundColor = ConsoleColor.Red;
+                        Console.WriteLine(DateTime.Now +
+                                          $"\r\n**********差异日志开始**********\r\n{Environment.NewLine}{JsonConvert.SerializeObject(LogDiff)}{Environment.NewLine}**********差异日志结束**********\r\n");
                     };
-                    await db.GetConnectionScope(SqlSugarConst.ConfigId).Insertable(LogDiff).ExecuteCommandAsync();
-                    Console.ForegroundColor = ConsoleColor.Red;
-                    Console.WriteLine(DateTime.Now + $"\r\n**********差异日志开始**********\r\n{Environment.NewLine}{JsonConvert.SerializeObject(LogDiff)}{Environment.NewLine}**********差异日志结束**********\r\n");
-                };
-
-                // 配置实体假删除过滤器
-                SetDeletedEntityFilter(dbProvider);
-                // 配置实体机构过滤器
-                SetOrgEntityFilter(dbProvider);
-                // 配置自定义实体过滤器
-                SetCustomEntityFilter(dbProvider);
-                // 配置租户实体过滤器
-                SetTenantEntityFilter(dbProvider);
-            });
+
+                    // 配置实体假删除过滤器
+                    SetDeletedEntityFilter(dbProvider);
+                    // 配置实体机构过滤器
+                    SetOrgEntityFilter(dbProvider);
+                    // 配置自定义实体过滤器
+                    SetCustomEntityFilter(dbProvider);
+                    // 配置租户实体过滤器
+                    SetTenantEntityFilter(dbProvider);
+                });
+                initConfig = true;
+            }
         });
 
         // 初始化数据库结构及种子数据