namespace Admin.NET.Core;
///
/// SqlSugar仓储类
///
///
public class SqlSugarRepository : SimpleClient where T : class, new()
{
protected ITenant iTenant = null; // 多租户事务
public SqlSugarRepository(ISqlSugarClient context = null) : base(context)
{
iTenant = App.GetRequiredService().AsTenant();
// 若实体贴有多库特性,则返回指定的连接
if (typeof(T).IsDefined(typeof(TenantAttribute), false))
{
base.Context = iTenant.GetConnectionScopeWithAttr();
return;
}
// 若实体贴有系统表特性,则返回默认的连接
if (typeof(T).IsDefined(typeof(SystemTableAttribute), false))
{
base.Context = iTenant.GetConnectionScope(SqlSugarConst.ConfigId);
return;
}
// 若当前未登录或是默认租户Id,则返回默认的连接
var tenantId = App.GetRequiredService().TenantId;
if (tenantId < 1 || tenantId.ToString() == SqlSugarConst.ConfigId) return;
// 根据租户Id切库
if (!iTenant.IsAnyConnection(tenantId.ToString()))
{
var tenant = App.GetRequiredService().Get>(CacheConst.KeyTenant)
.FirstOrDefault(u => u.Id == tenantId);
iTenant.AddConnection(new ConnectionConfig()
{
ConfigId = tenant.Id,
DbType = tenant.DbType,
ConnectionString = tenant.Connection,
IsAutoCloseConnection = true
});
SqlSugarSetup.SetDbAop(iTenant.GetConnectionScope(tenantId.ToString()));
}
base.Context = iTenant.GetConnectionScope(tenantId.ToString());
}
}