refactor: 重构多租户模块,优化上线

This commit is contained in:
橙子
2024-05-18 03:06:53 +08:00
parent 1ca1c280f6
commit f2e3c76539
11 changed files with 154 additions and 107 deletions

View File

@@ -51,66 +51,5 @@ namespace Yi.Framework.SqlSugarCore.Abstractions
/// </summary>
public bool EnabledSaasMultiTenancy { get; set; } = false;
/// <summary>
/// 默认租户库连接,如果不填,那就是默认库的地址
/// </summary>
public string? MasterSaasMultiTenancyUrl { get; set; }
/// <summary>
/// Saas租户连接
/// </summary>
public List<SaasMultiTenancyOptions>? SaasMultiTenancy { get; set; }
public static string MasterTenantName = "Master";
public static string DefaultTenantName = "Default";
/// <summary>
/// 获取默认数据库
/// </summary>
/// <returns></returns>
public SaasMultiTenancyOptions GetDefaultSaasMultiTenancy()
{
return new SaasMultiTenancyOptions { Name = DefaultTenantName, Url = Url };
}
/// <summary>
/// 获取主数据库
/// </summary>
/// <returns></returns>
public SaasMultiTenancyOptions? GetMasterSaasMultiTenancy()
{
if (EnabledSaasMultiTenancy == false)
{
return null;
}
if (string.IsNullOrEmpty(MasterSaasMultiTenancyUrl))
{
return new SaasMultiTenancyOptions { Name = MasterTenantName, Url = Url };
}
else
{
return new SaasMultiTenancyOptions()
{
Name = MasterTenantName,
Url = MasterSaasMultiTenancyUrl
};
}
}
}
public class SaasMultiTenancyOptions
{
/// <summary>
/// 租户名称标识
/// </summary>
public string Name { get; set; }
/// <summary>
/// 连接Url
/// </summary>
public string Url { get; set; }
}
}

View File

@@ -7,7 +7,7 @@ using System.Threading.Tasks;
namespace Yi.Framework.SqlSugarCore.Abstractions
{
[AttributeUsage(AttributeTargets.Class)]
public class MasterTenantAttribute : Attribute
public class DefaultTenantTableAttribute : Attribute
{
}
}

View File

@@ -25,7 +25,6 @@ namespace Yi.Framework.SqlSugarCore
/// </summary>
public ISqlSugarClient SqlSugarClient { get; private set; }
public ICurrentUser CurrentUser => LazyServiceProvider.GetRequiredService<ICurrentUser>();
private readonly string MasterTenantDbDefaultName = DbConnOptions.MasterTenantName;
private IAbpLazyServiceProvider LazyServiceProvider { get; }
private IGuidGenerator GuidGenerator => LazyServiceProvider.LazyGetRequiredService<IGuidGenerator>();
@@ -38,6 +37,7 @@ namespace Yi.Framework.SqlSugarCore
public IEntityChangeEventHelper EntityChangeEventHelper => LazyServiceProvider.LazyGetService<IEntityChangeEventHelper>(NullEntityChangeEventHelper.Instance);
public DbConnOptions Options => LazyServiceProvider.LazyGetRequiredService<IOptions<DbConnOptions>>().Value;
public AbpDbConnectionOptions ConnectionOptions=> LazyServiceProvider.LazyGetRequiredService<IOptions<AbpDbConnectionOptions>>().Value;
private ISqlSugarDbConnectionCreator _dbConnectionCreator;
public void SetSqlSugarClient(ISqlSugarClient sqlSugarClient)
@@ -69,21 +69,23 @@ namespace Yi.Framework.SqlSugarCore
/// <returns></returns>
protected virtual string GetCurrentConnectionString()
{
var defautlUrl = Options.Url ?? ConnectionOptions.GetConnectionStringOrNull(ConnectionStrings.DefaultConnectionStringName);
//如果未开启多租户返回db url 或者 默认连接字符串
if (!Options.EnabledSaasMultiTenancy)
{
return defautlUrl;
}
//开启了多租户
var connectionStringResolver = LazyServiceProvider.LazyGetRequiredService<IConnectionStringResolver>();
var connectionString = connectionStringResolver.ResolveAsync().Result;
//没有检测到使用多租户功能,默认使用默认库即可
if (string.IsNullOrWhiteSpace(connectionString))
{
Volo.Abp.Check.NotNull(Options.Url, "租户默认库Defalut未找到");
connectionString = Options.Url;
}
//如果当前租户是主库,单独使用主要库
if (CurrentTenant.Name == MasterTenantDbDefaultName)
{
var conStrOrNull = Options.GetMasterSaasMultiTenancy();
Volo.Abp.Check.NotNull(conStrOrNull, "租户主库Master未找到");
connectionString = conStrOrNull.Url;
connectionString = defautlUrl;
}
return connectionString!;
}