using DS.Module.UserModule;
using Microsoft.Extensions.DependencyInjection;
using SqlSugar;
using NLog;
namespace DS.Module.SqlSugar;
///
/// saas数据库服务
///
public class SaasDbService : ISaasDbService
{
private readonly IServiceProvider _serviceProvider;
private readonly SqlSugarScope db;
private readonly IUser user;
private readonly ISaasDbService saasService;
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
///
/// 构造函数
///
///
public SaasDbService(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
db = (SqlSugarScope)_serviceProvider.GetRequiredService();
user = _serviceProvider.GetRequiredService();
}
///
/// 根据用户租户Id获取业务库
///
///
public ISqlSugarClient GetBizDb()
{
var tenantId = user.GetTenantId().ToString();
if (!db.IsAnyConnection(tenantId))
{
var connInfo = GetMasterDb().Queryable().First(x => x.TenantId == long.Parse(tenantId));
//用非默认ConfigId进行测试
//添加业务库只在当前上下文有效(原理:SqlSugarScope模式入门文档去看)
db.AddConnection(new ConnectionConfig()
{
ConfigId = tenantId,
ConnectionString = connInfo.Connection,
DbType = connInfo.DbType,
IsAutoCloseConnection = true
});
}
return db.GetConnection(tenantId);
}
///
/// 获取主库信息
///
///
public ISqlSugarClient GetMasterDb()
{
return db.GetConnection("1288018625843826688");
}
///
/// 主库根据Id获取业务库
///
///
public ISqlSugarClient GetBizDbById(object configId)
{
if(!db.IsAnyConnection(configId))
{
var connInfo = GetMasterDb().Queryable().First(x => x.TenantId == Convert.ToInt64(configId));
//用非默认ConfigId进行测试
//添加业务库只在当前上下文有效(原理:SqlSugarScope模式入门文档去看)
db.AddConnection(new ConnectionConfig() {
ConfigId = configId,
ConnectionString = connInfo.Connection,
DbType = connInfo.DbType,
IsAutoCloseConnection = true });
}
return db.GetConnection(configId);
}
///
/// 主库根据Id获取业务库Scope
///
///
///
public SqlSugarScopeProvider GetBizDbScopeById(object configId)
{
if(!db.IsAnyConnection(configId))
{
var connInfo = GetMasterDb().Queryable().First(x => x.TenantId == Convert.ToInt64(configId));
//用非默认ConfigId进行测试
//添加业务库只在当前上下文有效(原理:SqlSugarScope模式入门文档去看)
db.AddConnection(new ConnectionConfig() {
ConfigId = configId,
ConnectionString = connInfo.Connection,
DbType = connInfo.DbType,
IsAutoCloseConnection = true });
}
return db.GetConnectionScope(configId);
}
public SqlSugarScopeProvider GetMasterDbScope()
{
return db.GetConnectionScope("1288018625843826688");
}
}