You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.7 KiB
43 lines
1.7 KiB
|
|
namespace Admin.NET.Core;
|
|
|
|
/// <summary>
|
|
/// SqlSugar 实体仓储
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
public class SqlSugarRepository<T> : SimpleClient<T> where T : class, new()
|
|
{
|
|
public SqlSugarRepository()
|
|
{
|
|
var iTenant = App.GetRequiredService<ISqlSugarClient>().AsTenant();
|
|
base.Context = iTenant.GetConnectionScope(SqlSugarConst.MainConfigId);
|
|
|
|
// 若实体贴有多库特性,则返回指定库连接
|
|
if (typeof(T).IsDefined(typeof(TenantAttribute), false))
|
|
{
|
|
base.Context = iTenant.GetConnectionScopeWithAttr<T>();
|
|
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<SysTenantService>().GetTenantDbConnectionScope(long.Parse(tenantId));
|
|
if (sqlSugarScopeProviderTenant == null) return;
|
|
base.Context = sqlSugarScopeProviderTenant;
|
|
}
|
|
}
|