|  | @@ -14,25 +14,29 @@ using System.Collections.Concurrent;
 | 
	
		
			
				|  |  |  using System.Reflection;
 | 
	
		
			
				|  |  |  using ZhonTai.Admin.Domain.User;
 | 
	
		
			
				|  |  |  using ZhonTai.Admin.Domain.Role;
 | 
	
		
			
				|  |  | +using ZhonTai.Admin.Core.Db.Transaction;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  namespace ZhonTai.Admin.Core.Db;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  public static class DBServiceCollectionExtensions
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |      /// <summary>
 | 
	
		
			
				|  |  | -    /// 添加主数据库
 | 
	
		
			
				|  |  | +    /// 注册数据库
 | 
	
		
			
				|  |  |      /// </summary>
 | 
	
		
			
				|  |  | -    /// <param name="services"></param>
 | 
	
		
			
				|  |  |      /// <param name="freeSqlCloud"></param>
 | 
	
		
			
				|  |  | -    /// <param name="env"></param>
 | 
	
		
			
				|  |  | +    /// <param name="user"></param>
 | 
	
		
			
				|  |  | +    /// <param name="dbConfig"></param>
 | 
	
		
			
				|  |  | +    /// <param name="appConfig"></param>
 | 
	
		
			
				|  |  |      /// <param name="hostAppOptions"></param>
 | 
	
		
			
				|  |  | -    /// <returns></returns>
 | 
	
		
			
				|  |  | -    public static void AddMasterDb(this IServiceCollection services, FreeSqlCloud freeSqlCloud, IHostEnvironment env, HostAppOptions hostAppOptions)
 | 
	
		
			
				|  |  | +    private static void RegisterDb(
 | 
	
		
			
				|  |  | +        FreeSqlCloud freeSqlCloud,
 | 
	
		
			
				|  |  | +        IUser user,
 | 
	
		
			
				|  |  | +        DbConfig dbConfig,
 | 
	
		
			
				|  |  | +        AppConfig appConfig,
 | 
	
		
			
				|  |  | +        HostAppOptions hostAppOptions
 | 
	
		
			
				|  |  | +    )
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -        var dbConfig = ConfigHelper.Get<DbConfig>("dbconfig", env.EnvironmentName);
 | 
	
		
			
				|  |  | -        var appConfig = ConfigHelper.Get<AppConfig>("appconfig", env.EnvironmentName);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        //注册主库
 | 
	
		
			
				|  |  | +        //注册数据库
 | 
	
		
			
				|  |  |          freeSqlCloud.Register(DbKeys.MasterDb, () =>
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              //创建数据库
 | 
	
	
		
			
				|  | @@ -63,15 +67,14 @@ public static class DBServiceCollectionExtensions
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  |                  freeSqlBuilder.UseMonitorCommand(cmd => { }, (cmd, traceLog) =>
 | 
	
		
			
				|  |  |                  {
 | 
	
		
			
				|  |  | -                    //Console.WriteLine($"{cmd.CommandText}\n{traceLog}\r\n");
 | 
	
		
			
				|  |  | -                    Console.WriteLine($"{cmd.CommandText}\r\n");
 | 
	
		
			
				|  |  | +                    //Console.WriteLine($"{cmd.CommandText}\n{traceLog}{Environment.NewLine}");
 | 
	
		
			
				|  |  | +                    Console.WriteLine($"{cmd.CommandText}{Environment.NewLine}");
 | 
	
		
			
				|  |  |                  });
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              #endregion 监听所有命令
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              var fsql = freeSqlBuilder.Build();
 | 
	
		
			
				|  |  | -            var user = services.BuildServiceProvider().GetService<IUser>();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              //软删除过滤器
 | 
	
		
			
				|  |  |              fsql.GlobalFilter.ApplyOnly<IDelete>(FilterNames.Delete, a => a.IsDeleted == false);
 | 
	
	
		
			
				|  | @@ -109,7 +112,7 @@ public static class DBServiceCollectionExtensions
 | 
	
		
			
				|  |  |              );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              //配置实体
 | 
	
		
			
				|  |  | -            DbHelper.ConfigEntity(fsql, appConfig);
 | 
	
		
			
				|  |  | +            DbHelper.ConfigEntity(fsql, appConfig, dbConfig);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              hostAppOptions?.ConfigureFreeSql?.Invoke(fsql);
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -158,7 +161,7 @@ public static class DBServiceCollectionExtensions
 | 
	
		
			
				|  |  |                      {
 | 
	
		
			
				|  |  |                          MiniProfiler.Current.CustomTiming("CurdBefore", e.Sql);
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  | -                    Console.WriteLine($"{e.Sql}\r\n");
 | 
	
		
			
				|  |  | +                    Console.WriteLine($"{e.Sql}{Environment.NewLine}");
 | 
	
		
			
				|  |  |                  };
 | 
	
		
			
				|  |  |                  fsql.Aop.CurdAfter += (s, e) =>
 | 
	
		
			
				|  |  |                  {
 | 
	
	
		
			
				|  | @@ -174,67 +177,45 @@ public static class DBServiceCollectionExtensions
 | 
	
		
			
				|  |  |              return fsql;
 | 
	
		
			
				|  |  |          });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        //执行注册数据库
 | 
	
		
			
				|  |  | +        var fsql = freeSqlCloud.Use(dbConfig.Key);
 | 
	
		
			
				|  |  | +        if (dbConfig.SyncStructure)
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            var _ = fsql.CodeFirst;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /// <summary>
 | 
	
		
			
				|  |  | +    /// 添加数据库
 | 
	
		
			
				|  |  | +    /// </summary>
 | 
	
		
			
				|  |  | +    /// <param name="services"></param>
 | 
	
		
			
				|  |  | +    /// <param name="env"></param>
 | 
	
		
			
				|  |  | +    /// <param name="hostAppOptions"></param>
 | 
	
		
			
				|  |  | +    /// <returns></returns>
 | 
	
		
			
				|  |  | +    public static void AddDb(this IServiceCollection services, IHostEnvironment env, HostAppOptions hostAppOptions)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        var dbConfig = ConfigHelper.Get<DbConfig>("dbconfig", env.EnvironmentName);
 | 
	
		
			
				|  |  | +        var appConfig = ConfigHelper.Get<AppConfig>("appconfig", env.EnvironmentName);
 | 
	
		
			
				|  |  | +        var user = services.BuildServiceProvider().GetService<IUser>();
 | 
	
		
			
				|  |  | +        var freeSqlCloud = appConfig.DistributeKey.IsNull() ? new FreeSqlCloud() : new FreeSqlCloud(appConfig.DistributeKey);
 | 
	
		
			
				|  |  | +        if (dbConfig.Key.NotNull())
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            DbKeys.MasterDb = dbConfig.Key;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        RegisterDb(freeSqlCloud, user, dbConfig, appConfig, hostAppOptions);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          //注册多数据库
 | 
	
		
			
				|  |  |          if (dbConfig.Dbs?.Length > 0)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              foreach (var db in dbConfig.Dbs)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | -                freeSqlCloud.Register(DbKeys.MultiDb + db.Key, () =>
 | 
	
		
			
				|  |  | -                {
 | 
	
		
			
				|  |  | -                    #region FreeSql
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    var freeSqlBuilder = new FreeSqlBuilder()
 | 
	
		
			
				|  |  | -                            .UseConnectionString(db.Type, db.ConnectionString, db.ProviderType.NotNull() ? Type.GetType(db.ProviderType) : null)
 | 
	
		
			
				|  |  | -                            .UseAutoSyncStructure(false)
 | 
	
		
			
				|  |  | -                            .UseLazyLoading(false)
 | 
	
		
			
				|  |  | -                            .UseNoneCommandParameter(true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    hostAppOptions?.ConfigureFreeSqlBuilder?.Invoke(freeSqlBuilder);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    #region 监听所有命令
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    if (dbConfig.MonitorCommand)
 | 
	
		
			
				|  |  | -                    {
 | 
	
		
			
				|  |  | -                        freeSqlBuilder.UseMonitorCommand(cmd => { }, (cmd, traceLog) =>
 | 
	
		
			
				|  |  | -                        {
 | 
	
		
			
				|  |  | -                            //Console.WriteLine($"{cmd.CommandText}\n{traceLog}\r\n");
 | 
	
		
			
				|  |  | -                            Console.WriteLine($"{cmd.CommandText}\r\n");
 | 
	
		
			
				|  |  | -                        });
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    #endregion 监听所有命令
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    var fsql = freeSqlBuilder.Build();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    #region 监听Curd操作
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    if (dbConfig.Curd)
 | 
	
		
			
				|  |  | -                    {
 | 
	
		
			
				|  |  | -                        fsql.Aop.CurdBefore += (s, e) =>
 | 
	
		
			
				|  |  | -                        {
 | 
	
		
			
				|  |  | -                            if (appConfig.MiniProfiler)
 | 
	
		
			
				|  |  | -                            {
 | 
	
		
			
				|  |  | -                                MiniProfiler.Current.CustomTiming("CurdBefore", e.Sql);
 | 
	
		
			
				|  |  | -                            }
 | 
	
		
			
				|  |  | -                            Console.WriteLine($"{e.Sql}\r\n");
 | 
	
		
			
				|  |  | -                        };
 | 
	
		
			
				|  |  | -                        fsql.Aop.CurdAfter += (s, e) =>
 | 
	
		
			
				|  |  | -                        {
 | 
	
		
			
				|  |  | -                            if (appConfig.MiniProfiler)
 | 
	
		
			
				|  |  | -                            {
 | 
	
		
			
				|  |  | -                                MiniProfiler.Current.CustomTiming("CurdAfter", $"{e.ElapsedMilliseconds}");
 | 
	
		
			
				|  |  | -                            }
 | 
	
		
			
				|  |  | -                        };
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    #endregion 监听Curd操作
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    #endregion FreeSql
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -                    return fsql;
 | 
	
		
			
				|  |  | -                });
 | 
	
		
			
				|  |  | +                RegisterDb(freeSqlCloud, user, db, appConfig, null);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        services.AddSingleton<IFreeSql>(freeSqlCloud);
 | 
	
		
			
				|  |  | +        services.AddSingleton(freeSqlCloud);
 | 
	
		
			
				|  |  | +        services.AddScoped<UnitOfWorkManagerCloud>();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /// <summary>
 |