159 lines
5.9 KiB
C#
159 lines
5.9 KiB
C#
using Microsoft.Extensions.DependencyInjection;
|
|
using SqlSugar;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using VolPro.Core.Configuration;
|
|
using VolPro.Core.Const;
|
|
using VolPro.Core.DBManager;
|
|
using VolPro.Core.EFDbContext;
|
|
using VolPro.Core.Enums;
|
|
using VolPro.Core.Extensions;
|
|
using VolPro.Core.Extensions.AutofacManager;
|
|
using VolPro.Core.ManageUser;
|
|
using VolPro.Core.Utilities;
|
|
using VolPro.Entity;
|
|
|
|
namespace VolPro.Core.DbSqlSugar
|
|
{
|
|
public class DbManger
|
|
{
|
|
/// <summary>
|
|
/// 获取业务库对象(租户动态分库)
|
|
/// </summary>
|
|
public static ISqlSugarClient ServiceDb
|
|
{
|
|
get
|
|
{
|
|
var configId = UserContext.CurrentServiceId;
|
|
if (!Db.IsAnyConnection(configId))
|
|
{ //用非默认ConfigId进行测试
|
|
Db.AddConnection(new ConnectionConfig()
|
|
{
|
|
ConfigId = configId,
|
|
ConnectionString = DBServerProvider.ServiceConnectingString,
|
|
// //2024.01.22增加分库使用不同类型的数据库
|
|
DbType = SqlSugarDbType.GetType(typeof(ServiceDbContext).Name),// SqlSugar.DbType.SqlServer,
|
|
IsAutoCloseConnection = true,
|
|
//https://www.donet5.com/Home/Doc?typeId=1182
|
|
ConfigureExternalServices = new ConfigureExternalServices()
|
|
{
|
|
EntityService = (property, column) =>
|
|
{
|
|
if (GetDbType() == DbType.Dm)
|
|
{
|
|
var attributes = property.GetCustomAttributes(true);//get all attributes
|
|
column.DbColumnName = column.DbColumnName.ToUpper();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
var result = Db.GetConnection(configId);
|
|
return result;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 动态租户分库,获取指定数据库id的链接(2023.11.05)
|
|
/// </summary>
|
|
|
|
public static ISqlSugarClient GetServiceDb(Guid serviceId)
|
|
{
|
|
string configId = serviceId.ToString();
|
|
if (!Db.IsAnyConnection(configId))
|
|
{ //用非默认ConfigId进行测试
|
|
Db.AddConnection(new ConnectionConfig()
|
|
{
|
|
ConfigId = configId,
|
|
ConnectionString = DBServerProvider.GetServiceConnectingString(serviceId),
|
|
DbType = SqlSugarDbType.GetType(typeof(ServiceDbContext).Name),// SqlSugar.DbType.SqlServer,
|
|
IsAutoCloseConnection = true,
|
|
//https://www.donet5.com/Home/Doc?typeId=1182
|
|
ConfigureExternalServices = new ConfigureExternalServices()
|
|
{
|
|
EntityService = (property, column) =>
|
|
{
|
|
if (GetDbType() == DbType.Dm)
|
|
{
|
|
//var attributes = property.GetCustomAttributes(true);//get all attributes
|
|
column.DbColumnName = property.Name.ToUpper();// column.DbColumnName.ToUpper();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
var result = Db.GetConnection(configId);
|
|
return result;
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取系统库:后台异步使用
|
|
/// </summary>
|
|
public static SqlSugarScope SysDbContext = new SqlSugarScope(
|
|
SqlSugarRegister.GetSysConnectionConfig(),
|
|
db =>
|
|
{
|
|
db.Aop.OnLogExecuting = (sql, pars) =>
|
|
{
|
|
Console.WriteLine(sql);//输出sql,查看执行sql 性能无影响
|
|
|
|
};
|
|
});
|
|
|
|
/// <summary>
|
|
/// 根据dbcontext获取链接,
|
|
///
|
|
/// </summary>
|
|
/// <param name="dbContextName">
|
|
///获取系统库 DbManger.GetSqlSugarClient(typeof(SysDbContext).Name)
|
|
///获取业务库 DbManger.GetSqlSugarClient(typeof(ServiceDbContext).Name)
|
|
/// </param>
|
|
/// <returns></returns>
|
|
public static ISqlSugarClient GetSqlSugarClient(string dbContextName = null)
|
|
{
|
|
return GetConnection(dbContextName);
|
|
}
|
|
public static ISqlSugarClient GetConnection(string dbContextName)
|
|
{
|
|
if (string.IsNullOrEmpty(dbContextName) || typeof(SysDbContext).Name == dbContextName)
|
|
{
|
|
return SysDbContext;
|
|
}
|
|
else if (typeof(ServiceDbContext).Name == dbContextName && AppSetting.UseDynamicShareDB)
|
|
{
|
|
return ServiceDb;
|
|
}
|
|
//其他配置文件里面的自定义数据库链接名称
|
|
return Db.GetConnection(dbContextName);
|
|
}
|
|
|
|
public static SqlSugarScope Db
|
|
{
|
|
get
|
|
{
|
|
var obj = AutofacContainerModule.GetService<ISqlSugarClient>();
|
|
return (SqlSugarScope)obj;
|
|
}
|
|
}
|
|
|
|
public static DbType GetDbType()
|
|
{
|
|
return SqlSugarDbType.GetType();
|
|
}
|
|
/// <summary>
|
|
/// 根据model获取指定dbcontext对象2023.12.17
|
|
/// </summary>
|
|
/// <typeparam name="TEntity"></typeparam>
|
|
/// <returns></returns>
|
|
public static BaseDbContext GetDbContext<TEntity>()
|
|
{
|
|
string dbServer = typeof(TEntity).GetTypeCustomValue<EntityAttribute>(x => x.DBServer);
|
|
|
|
return HttpContext.Current.RequestServices.GetService(DbRelativeCache.GetDbContextType(dbServer)) as BaseDbContext;
|
|
}
|
|
}
|
|
}
|