using Microsoft.EntityFrameworkCore;
using Npgsql;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using VolPro.Core.Configuration;
using VolPro.Core.Const;
using VolPro.Core.Dapper;
using VolPro.Core.EFDbContext;
using VolPro.Core.Enums;
using VolPro.Core.Extensions;
using MySqlConnector;
using VolPro.Core.ManageUser;
using VolPro.Entity.SystemModels;
using VolPro.Entity;
using Microsoft.Extensions.DependencyModel;
using System.Reflection;
using System.Runtime.Loader;
using System.Linq;
using Oracle.ManagedDataAccess.Client;
using VolPro.Core.DbSqlSugar;
using SqlSugar;
using VolPro.Core.CacheManager;
namespace VolPro.Core.DBManager
{
public partial class DBServerProvider : DbManger
{
////系统库
private static readonly string DefaultConnName = nameof(SysDbContext);
static DBServerProvider()
{
}
public static void SetConnection(string key, string val)
{
DbRelativeCache.DbContextConnection[key] = val;
}
public static string GetConnectionString(string key)
{
return DbRelativeCache.DbContextConnection[key ?? DefaultConnName];
}
///
/// 获取系统库
///
public static SysDbContext DbContext
{
get
{
SysDbContext dbContext = Utilities.HttpContext.Current.RequestServices.GetService(typeof(SysDbContext)) as SysDbContext;
return dbContext;
}
}
///
/// 根据实体model获取对应EF
///
///
///
public static BaseDbContext GetEntityDbContext()
{
string dbServer = typeof(TEntity).GetTypeCustomValue(x => x.DBServer);
return Utilities.HttpContext.Current.RequestServices.GetService(DbRelativeCache.GetDbContextType(dbServer)) as BaseDbContext;
}
///
/// 指定获取数据库
///
///
///
public static string GetDbEntityName(string dbServer)
{
return DbRelativeCache.GetDbEntityType(dbServer).Name;
}
//public static ISqlSugarClient GetSqlSugarClient(string connectionKey = null)
//{
// return DbManger.GetConnection(connectionKey);
//}
///
/// 根据dbcontext名称获取数据库链接
///
///
///
///
public static string GetDbConnectionString(string key)
{
if (DbRelativeCache.DbContextConnection.TryGetValue(key, out string connString))
{
return connString;
}
throw new Exception($"未配置[{key}]的数据库连接");
}
public static string GetDbConnectionString(Type dbContext)
{
return GetDbConnectionString(dbContext.Name);
}
///
/// 获取系统库的字符串连接
///
public static string SysConnectingString
{
get { return GetDbConnectionString(DefaultConnName); }
}
///
/// 获取业务库的字符串连接
///
public static string ServiceConnectingString
{
get
{
//动态无限分库获取用户当前选择的数据库
if (AppSetting.UseDynamicShareDB)
{
return GetDbConnectionString(UserContext.CurrentServiceId.ToString());
}
return GetDbConnectionString(nameof(ServiceDbContext));
}
}
///
/// 动态租户分库,获取指定数据库id的链接(2023.11.05)
///
///
///
public static string GetServiceConnectingString(Guid serviceId)
{
return DbRelativeCache.DbContextConnection[serviceId.ToString()];
}
}
}