From 64adfcceabad576c9dfda34a156da37280478cc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A9=99=E5=AD=90?= <454313500@qq.com> Date: Thu, 8 Feb 2024 12:59:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=A7=9F=E6=88=B7?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DbConnOptions.cs | 11 +- .../SqlSugarDbConnectionCreator.cs | 3 + .../SqlSugarDbContext.cs | 69 ++++++- .../Uow/SqlSugarTransactionApi.cs | 4 +- .../UnitOfWorkSqlsugarDbContextProvider.cs | 63 +------ .../TenantService.cs | 14 +- .../DefaultConnectionStringResolver2.cs | 168 ++++++++++++++++++ Yi.Abp.Net8/src/Yi.Abp.Web/Program.cs | 4 + Yi.Abp.Net8/src/Yi.Abp.Web/yi-abp-dev.db | Bin 405504 -> 405504 bytes Yi.Abp.Net8/src/Yi.Abp.Web/yi-test.db | Bin 0 -> 409600 bytes Yi.Abp.Net8/src/Yi.Abp.Web/yi-test2.db | Bin 0 -> 409600 bytes 11 files changed, 263 insertions(+), 73 deletions(-) create mode 100644 Yi.Abp.Net8/src/Yi.Abp.Web/DefaultConnectionStringResolver2.cs create mode 100644 Yi.Abp.Net8/src/Yi.Abp.Web/yi-test.db create mode 100644 Yi.Abp.Net8/src/Yi.Abp.Web/yi-test2.db diff --git a/Yi.Abp.Net8/framework/Yi.Framework.SqlSugarCore.Abstractions/DbConnOptions.cs b/Yi.Abp.Net8/framework/Yi.Framework.SqlSugarCore.Abstractions/DbConnOptions.cs index 4aeb7766..e8044cdf 100644 --- a/Yi.Abp.Net8/framework/Yi.Framework.SqlSugarCore.Abstractions/DbConnOptions.cs +++ b/Yi.Abp.Net8/framework/Yi.Framework.SqlSugarCore.Abstractions/DbConnOptions.cs @@ -66,11 +66,20 @@ namespace Yi.Framework.SqlSugarCore.Abstractions public static string MasterTenantDbDefaultName = "Master"; public static string TenantDbDefaultName = "Default"; + /// + /// 获取默认数据库 + /// + /// public SaasMultiTenancyOptions GetDefaultSaasMultiTenancy() { return new SaasMultiTenancyOptions { Name = TenantDbDefaultName, Url = Url }; } - public SaasMultiTenancyOptions? GetDefaultMasterSaasMultiTenancy() + + /// + /// 获取主数据库 + /// + /// + public SaasMultiTenancyOptions? GetMasterSaasMultiTenancy() { if (EnabledSaasMultiTenancy == false) { diff --git a/Yi.Abp.Net8/framework/Yi.Framework.SqlSugarCore/SqlSugarDbConnectionCreator.cs b/Yi.Abp.Net8/framework/Yi.Framework.SqlSugarCore/SqlSugarDbConnectionCreator.cs index 54637f83..1dd4a823 100644 --- a/Yi.Abp.Net8/framework/Yi.Framework.SqlSugarCore/SqlSugarDbConnectionCreator.cs +++ b/Yi.Abp.Net8/framework/Yi.Framework.SqlSugarCore/SqlSugarDbConnectionCreator.cs @@ -24,6 +24,9 @@ namespace Yi.Framework.SqlSugarCore currentDb.Aop.DataExecuted = this.DataExecuted; OnSqlSugarClientConfig(currentDb); } + + + public ConnectionConfig Build(Action? action=null) { var dbConnOptions = Options; diff --git a/Yi.Abp.Net8/framework/Yi.Framework.SqlSugarCore/SqlSugarDbContext.cs b/Yi.Abp.Net8/framework/Yi.Framework.SqlSugarCore/SqlSugarDbContext.cs index 7efaa086..6b57fcd6 100644 --- a/Yi.Abp.Net8/framework/Yi.Framework.SqlSugarCore/SqlSugarDbContext.cs +++ b/Yi.Abp.Net8/framework/Yi.Framework.SqlSugarCore/SqlSugarDbContext.cs @@ -24,7 +24,7 @@ namespace Yi.Framework.SqlSugarCore /// public ISqlSugarClient SqlSugarClient { get; private set; } public ICurrentUser CurrentUser => LazyServiceProvider.GetRequiredService(); - + private readonly string MasterTenantDbDefaultName = DbConnOptions.MasterTenantDbDefaultName; private IAbpLazyServiceProvider LazyServiceProvider { get; } private IGuidGenerator GuidGenerator => LazyServiceProvider.LazyGetRequiredService(); @@ -37,7 +37,7 @@ namespace Yi.Framework.SqlSugarCore public IEntityChangeEventHelper EntityChangeEventHelper => LazyServiceProvider.LazyGetService(NullEntityChangeEventHelper.Instance); public DbConnOptions Options => LazyServiceProvider.LazyGetRequiredService>().Value; - + private ISqlSugarDbConnectionCreator _dbConnectionCreator; public void SetSqlSugarClient(ISqlSugarClient sqlSugarClient) { @@ -47,16 +47,77 @@ namespace Yi.Framework.SqlSugarCore { LazyServiceProvider = lazyServiceProvider; var connectionCreator = LazyServiceProvider.LazyGetRequiredService(); + _dbConnectionCreator = connectionCreator; connectionCreator.OnSqlSugarClientConfig = OnSqlSugarClientConfig; connectionCreator.EntityService = EntityService; connectionCreator.DataExecuting = DataExecuting; connectionCreator.DataExecuted = DataExecuted; connectionCreator.OnLogExecuting = OnLogExecuting; connectionCreator.OnLogExecuted = OnLogExecuted; - SqlSugarClient = new SqlSugarClient(connectionCreator.Build()); - connectionCreator.SetDbAop(SqlSugarClient); + SqlSugarClient = new SqlSugarClient(connectionCreator.Build()); + var connectionStringResolver = LazyServiceProvider.LazyGetRequiredService(); + var connectionStr = connectionStringResolver.ResolveAsync().Result; + var changedDb = DatabaseChange(this, connectionStr); + SqlSugarClient = changedDb.SqlSugarClient; } + /// + /// db切换多库支持 + /// + /// + /// + /// + protected virtual SqlSugarDbContext DatabaseChange(SqlSugarDbContext dbContext, string connectionString) + { + string configId = string.Empty; + //没有检测到使用多租户功能,默认使用默认库即可 + if (string.IsNullOrWhiteSpace(connectionString)) + { + connectionString = dbContext.Options.Url; + configId = CurrentTenant.Name; + } + + var dbOption = dbContext.Options; + var db = dbContext.SqlSugarClient.AsTenant(); + + //主库的Db切换,当操作的是租户表的时候 + if (CurrentTenant.Name == MasterTenantDbDefaultName) + { + //直接切换 + configId = MasterTenantDbDefaultName; + var conStrOrNull = dbOption.GetMasterSaasMultiTenancy(); + Volo.Abp.Check.NotNull(conStrOrNull, "租户主库未找到"); + connectionString = conStrOrNull.Url; + } + + //租户Db的动态切换 + //二级缓存 + var changed = false; + if (!db.IsAnyConnection(configId)) + { + var config = _dbConnectionCreator.Build(options => + { + options.DbType = dbOption.DbType!.Value; + options.ConfigId = configId;//设置库的唯一标识 + options.IsAutoCloseConnection = true; + options.ConnectionString = connectionString; + }); + //添加一个db到当前上下文 (Add部分不线上下文不会共享) + db.AddConnection(config); + changed = true; + } + var currentDb = db.GetConnection(configId) as ISqlSugarClient; + //设置Aop + if (changed) + { + _dbConnectionCreator.SetDbAop(currentDb); + } + dbContext.SetSqlSugarClient(currentDb); + + return dbContext; + } + + /// /// 上下文对象扩展 /// diff --git a/Yi.Abp.Net8/framework/Yi.Framework.SqlSugarCore/Uow/SqlSugarTransactionApi.cs b/Yi.Abp.Net8/framework/Yi.Framework.SqlSugarCore/Uow/SqlSugarTransactionApi.cs index 44ea1419..6e49fa9f 100644 --- a/Yi.Abp.Net8/framework/Yi.Framework.SqlSugarCore/Uow/SqlSugarTransactionApi.cs +++ b/Yi.Abp.Net8/framework/Yi.Framework.SqlSugarCore/Uow/SqlSugarTransactionApi.cs @@ -20,7 +20,7 @@ namespace Yi.Framework.SqlSugarCore.Uow public async Task CommitAsync(CancellationToken cancellationToken = default) { - await _sqlsugarDbContext.SqlSugarClient.Ado.CommitTranAsync(); + // await _sqlsugarDbContext.SqlSugarClient.Ado.CommitTranAsync(); } public void Dispose() @@ -29,7 +29,7 @@ namespace Yi.Framework.SqlSugarCore.Uow public async Task RollbackAsync(CancellationToken cancellationToken = default) { - await _sqlsugarDbContext.SqlSugarClient.Ado.RollbackTranAsync(); + // await _sqlsugarDbContext.SqlSugarClient.Ado.RollbackTranAsync(); } } } diff --git a/Yi.Abp.Net8/framework/Yi.Framework.SqlSugarCore/Uow/UnitOfWorkSqlsugarDbContextProvider.cs b/Yi.Abp.Net8/framework/Yi.Framework.SqlSugarCore/Uow/UnitOfWorkSqlsugarDbContextProvider.cs index c04531a1..4c5317e9 100644 --- a/Yi.Abp.Net8/framework/Yi.Framework.SqlSugarCore/Uow/UnitOfWorkSqlsugarDbContextProvider.cs +++ b/Yi.Abp.Net8/framework/Yi.Framework.SqlSugarCore/Uow/UnitOfWorkSqlsugarDbContextProvider.cs @@ -14,7 +14,7 @@ namespace Yi.Framework.SqlSugarCore.Uow public class UnitOfWorkSqlsugarDbContextProvider : ISugarDbContextProvider where TDbContext : ISqlSugarDbContext { private readonly ISqlSugarDbConnectionCreator _dbConnectionCreator; - private readonly string MasterTenantDbDefaultName = DbConnOptions.MasterTenantDbDefaultName; + public ILogger> Logger { get; set; } public IServiceProvider ServiceProvider { get; set; } @@ -59,11 +59,10 @@ namespace Yi.Framework.SqlSugarCore.Uow ContextInstance.Current = (TDbContext)ServiceProvider.GetRequiredService(); } var dbContext = (TDbContext)ContextInstance.Current; - var output = DatabaseChange(dbContext, connectionStringName, connectionString); //提高体验,取消工作单元强制性 //throw new AbpException("A DbContext can only be created inside a unit of work!"); //如果不启用工作单元,创建一个新的db,不开启事务即可 - return output; + return dbContext; } @@ -100,64 +99,10 @@ namespace Yi.Framework.SqlSugarCore.Uow using (SqlSugarDbContextCreationContext.Use(creationContext)) { var dbContext = await CreateDbContextAsync(unitOfWork); - - //获取到DB之后,对多租户多库进行处理 - var changedDbContext = DatabaseChange(dbContext, connectionStringName, connectionString); - return changedDbContext; + return dbContext; } } - protected virtual TDbContext DatabaseChange(TDbContext dbContext, string configId, string connectionString) - { - //没有检测到使用多租户功能,默认使用默认库即可 - if (string.IsNullOrWhiteSpace(connectionString)) - { - connectionString = dbContext.Options.Url; - configId = DbConnOptions.TenantDbDefaultName; - } - - var dbOption = dbContext.Options; - var db = dbContext.SqlSugarClient.AsTenant(); - //主库的Db切换,当操作的是租户表的时候 - if (CurrentTenant.Name == MasterTenantDbDefaultName) - { - //直接切换 - configId = MasterTenantDbDefaultName; - var conStrOrNull = dbOption.GetDefaultMasterSaasMultiTenancy(); - Volo.Abp.Check.NotNull(conStrOrNull, "租户主库未找到"); - connectionString = conStrOrNull.Url; - } - - //租户Db的动态切换 - //二级缓存 - var changed = false; - if (!db.IsAnyConnection(configId)) - { - var config = _dbConnectionCreator.Build(options => - { - options.DbType = dbOption.DbType!.Value; - options.ConfigId = configId;//设置库的唯一标识 - options.IsAutoCloseConnection = true; - options.ConnectionString = connectionString; - }); - //添加一个db到当前上下文 (Add部分不线上下文不会共享) - db.AddConnection(config); - changed = true; - } - var currentDb = db.GetConnection(configId) as ISqlSugarClient; - - //设置Aop - if (changed) - { - _dbConnectionCreator.SetDbAop(currentDb); - } - - - dbContext.SetSqlSugarClient(currentDb); - return dbContext; - } - - protected virtual async Task CreateDbContextAsync(IUnitOfWork unitOfWork) { return unitOfWork.Options.IsTransactional @@ -182,7 +127,7 @@ namespace Yi.Framework.SqlSugarCore.Uow ); unitOfWork.AddTransactionApi(transactionApiKey, transaction); - await dbContext.SqlSugarClient.Ado.BeginTranAsync(); + // await dbContext.SqlSugarClient.Ado.BeginTranAsync(); return dbContext; } else diff --git a/Yi.Abp.Net8/module/tenant-management/Yi.Framework.TenantManagement.Application/TenantService.cs b/Yi.Abp.Net8/module/tenant-management/Yi.Framework.TenantManagement.Application/TenantService.cs index f215cdad..87739eac 100644 --- a/Yi.Abp.Net8/module/tenant-management/Yi.Framework.TenantManagement.Application/TenantService.cs +++ b/Yi.Abp.Net8/module/tenant-management/Yi.Framework.TenantManagement.Application/TenantService.cs @@ -110,17 +110,18 @@ namespace Yi.Framework.TenantManagement.Application [HttpPut("tenant/init/{id}")] public async Task InitAsync([FromRoute]Guid id) { - using (CurrentTenant.Change(id)) + using (CurrentTenant.Change(id,"test")) { - CodeFirst(await _repository.GetDbContextAsync()); + await CodeFirst(this.LazyServiceProvider); await _dataSeeder.SeedAsync(id); } + } - private void CodeFirst(ISqlSugarClient db) + private async Task CodeFirst(IServiceProvider service) { - - var moduleContainer = ServiceProvider.GetRequiredService(); + var moduleContainer = service.GetRequiredService(); + var db = await _repository.GetDbContextAsync(); //尝试创建数据库 db.DbMaintenance.CreateDatabase(); @@ -131,12 +132,11 @@ namespace Yi.Framework.TenantManagement.Application types.AddRange(module.Assembly.GetTypes() .Where(x => x.GetCustomAttribute() == null) .Where(x => x.GetCustomAttribute() != null) - .Where(x=>x.GetCustomAttribute()==null) .Where(x => x.GetCustomAttribute() is null)); } if (types.Count > 0) { - db.CodeFirst.InitTables(types.ToArray()); + db.CopyNew().CodeFirst.InitTables(types.ToArray()); } } diff --git a/Yi.Abp.Net8/src/Yi.Abp.Web/DefaultConnectionStringResolver2.cs b/Yi.Abp.Net8/src/Yi.Abp.Web/DefaultConnectionStringResolver2.cs new file mode 100644 index 00000000..a285d577 --- /dev/null +++ b/Yi.Abp.Net8/src/Yi.Abp.Web/DefaultConnectionStringResolver2.cs @@ -0,0 +1,168 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.MultiTenancy; + +[Dependency(ReplaceServices = true)] +public class MultiTenantConnectionStringResolver2 : DefaultConnectionStringResolver +{ + private readonly ICurrentTenant _currentTenant; + private readonly IServiceProvider _serviceProvider; + + public MultiTenantConnectionStringResolver2( + IOptionsMonitor options, + ICurrentTenant currentTenant, + IServiceProvider serviceProvider) + : base(options) + { + _currentTenant = currentTenant; + _serviceProvider = serviceProvider; + } + + public override async Task ResolveAsync(string? connectionStringName = null) + { + if (_currentTenant.Id == null) + { + //No current tenant, fallback to default logic + return await base.ResolveAsync(connectionStringName); + } + + var tenant = await FindTenantConfigurationAsync(_currentTenant.Id.Value); + + if (tenant == null || tenant.ConnectionStrings.IsNullOrEmpty()) + { + //Tenant has not defined any connection string, fallback to default logic + return await base.ResolveAsync(connectionStringName); + } + + var tenantDefaultConnectionString = tenant.ConnectionStrings?.Default; + + //Requesting default connection string... + //if (connectionStringName == null || + // connectionStringName == ConnectionStrings.DefaultConnectionStringName) + //{ + // //Return tenant's default or global default + // return !tenantDefaultConnectionString.IsNullOrWhiteSpace() + // ? tenantDefaultConnectionString! + // : Options.ConnectionStrings.Default!; + //} + + //Requesting specific connection string... + var connString = tenant.ConnectionStrings?.FirstOrDefault().Value; + if (!connString.IsNullOrWhiteSpace()) + { + //Found for the tenant + return connString!; + } + + //Fallback to the mapped database for the specific connection string + var database = Options.Databases.GetMappedDatabaseOrNull(connectionStringName); + if (database != null && database.IsUsedByTenants) + { + connString = tenant.ConnectionStrings?.GetOrDefault(database.DatabaseName); + if (!connString.IsNullOrWhiteSpace()) + { + //Found for the tenant + return connString!; + } + } + + //Fallback to tenant's default connection string if available + if (!tenantDefaultConnectionString.IsNullOrWhiteSpace()) + { + return tenantDefaultConnectionString!; + } + + return await base.ResolveAsync(connectionStringName); + } + + [Obsolete("Use ResolveAsync method.")] + public override string Resolve(string? connectionStringName = null) + { + if (_currentTenant.Id == null) + { + //No current tenant, fallback to default logic + return base.Resolve(connectionStringName); + } + + var tenant = FindTenantConfiguration(_currentTenant.Id.Value); + + if (tenant == null || tenant.ConnectionStrings.IsNullOrEmpty()) + { + //Tenant has not defined any connection string, fallback to default logic + return base.Resolve(connectionStringName); + } + + var tenantDefaultConnectionString = tenant.ConnectionStrings?.Default; + + //Requesting default connection string... + if (connectionStringName == null || + connectionStringName == ConnectionStrings.DefaultConnectionStringName) + { + //Return tenant's default or global default + return !tenantDefaultConnectionString.IsNullOrWhiteSpace() + ? tenantDefaultConnectionString! + : Options.ConnectionStrings.Default!; + } + + //Requesting specific connection string... + var connString = tenant.ConnectionStrings?.GetOrDefault(connectionStringName); + if (!connString.IsNullOrWhiteSpace()) + { + //Found for the tenant + return connString!; + } + + //Fallback to tenant's default connection string if available + if (!tenantDefaultConnectionString.IsNullOrWhiteSpace()) + { + return tenantDefaultConnectionString!; + } + + //Try to find the specific connection string for given name + var connStringInOptions = Options.ConnectionStrings.GetOrDefault(connectionStringName); + if (!connStringInOptions.IsNullOrWhiteSpace()) + { + return connStringInOptions!; + } + + //Fallback to the global default connection string + var defaultConnectionString = Options.ConnectionStrings.Default; + if (!defaultConnectionString.IsNullOrWhiteSpace()) + { + return defaultConnectionString!; + } + + throw new AbpException("No connection string defined!"); + } + + protected virtual async Task FindTenantConfigurationAsync(Guid tenantId) + { + using (var serviceScope = _serviceProvider.CreateScope()) + { + var tenantStore = serviceScope + .ServiceProvider + .GetRequiredService(); + + return await tenantStore.FindAsync(tenantId); + } + } + + [Obsolete("Use FindTenantConfigurationAsync method.")] + protected virtual TenantConfiguration? FindTenantConfiguration(Guid tenantId) + { + using (var serviceScope = _serviceProvider.CreateScope()) + { + var tenantStore = serviceScope + .ServiceProvider + .GetRequiredService(); + + return tenantStore.Find(tenantId); + } + } +} diff --git a/Yi.Abp.Net8/src/Yi.Abp.Web/Program.cs b/Yi.Abp.Net8/src/Yi.Abp.Web/Program.cs index 0feeab19..f8c9f615 100644 --- a/Yi.Abp.Net8/src/Yi.Abp.Web/Program.cs +++ b/Yi.Abp.Net8/src/Yi.Abp.Web/Program.cs @@ -1,5 +1,8 @@ +using Microsoft.Extensions.DependencyInjection.Extensions; using Serilog; using Serilog.Events; +using Volo.Abp.Data; +using Volo.Abp.MultiTenancy; using Yi.Abp.Web; //创建日志,可使用{SourceContext}记录 @@ -23,6 +26,7 @@ try builder.Host.UseAutofac(); builder.Host.UseSerilog(); await builder.Services.AddApplicationAsync(); + builder.Services.Replace(new ServiceDescriptor(typeof(IConnectionStringResolver), typeof(MultiTenantConnectionStringResolver2),ServiceLifetime.Transient)); var app = builder.Build(); await app.InitializeApplicationAsync(); await app.RunAsync(); diff --git a/Yi.Abp.Net8/src/Yi.Abp.Web/yi-abp-dev.db b/Yi.Abp.Net8/src/Yi.Abp.Web/yi-abp-dev.db index f46d3d4ef4fbc6385438b1527a56bea71bbaf08b..6899f4cab6d61909cda8b4e27f54d708da4e08c3 100644 GIT binary patch delta 243 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 C-OF46 literal 0 HcmV?d00001 diff --git a/Yi.Abp.Net8/src/Yi.Abp.Web/yi-test2.db b/Yi.Abp.Net8/src/Yi.Abp.Web/yi-test2.db new file mode 100644 index 0000000000000000000000000000000000000000..c88deb025d68fdf9908d34fa8be6b4dc15417cfd GIT binary patch literal 409600 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 K>Z9gUto{#DOtvQg literal 0 HcmV?d00001