using Org.BouncyCastle.Asn1.X509.Qualified; namespace Admin.NET.Core; /// /// SqlSugar 实体仓储 /// /// public class SqlSugarRepository : SimpleClient where T : class, new() { public SqlSugarRepository() { var iTenant = App.GetRequiredService().AsTenant(); base.Context = iTenant.GetConnectionScope(SqlSugarConst.MainConfigId); // 若实体贴有多库特性,则返回指定库连接 if (typeof(T).IsDefined(typeof(TenantAttribute), false)) { base.Context = iTenant.GetConnectionScopeWithAttr(); return; } // 若实体贴有日志表特性,则返回日志库连接 if (typeof(T).IsDefined(typeof(LogTableAttribute), false)) { if (iTenant.IsAnyConnection(SqlSugarConst.LogConfigId)) base.Context = iTenant.GetConnectionScope(SqlSugarConst.LogConfigId); return; } // 若实体贴有系统表特性,则返回默认库连接 if (typeof(T).IsDefined(typeof(SysTableAttribute), false)) return; // 若未贴任何表特性或当前未登录或是默认租户Id,则返回默认库连接 var tenantId = App.User?.FindFirst(ClaimConst.TenantId)?.Value; if (string.IsNullOrWhiteSpace(tenantId) || tenantId == SqlSugarConst.MainConfigId) return; // 根据租户Id切换库连接, 为空则返回默认库连接 var sqlSugarScopeProviderTenant = App.GetRequiredService().GetTenantDbConnectionScope(long.Parse(tenantId)); if (sqlSugarScopeProviderTenant == null) return; base.Context = sqlSugarScopeProviderTenant; } }