using Microsoft.EntityFrameworkCore; using MySqlConnector; using Npgsql; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using WIDESEA_Core.Configuration; using WIDESEA_Core.Const; using WIDESEA_Core.Dapper; using WIDESEA_Core.EFDbContext; using WIDESEA_Core.Enums; using WIDESEA_Core.Extensions; namespace WIDESEA_Core.DBManager { public partial class DBServerProvider { private static Dictionary ConnectionPool = new Dictionary(StringComparer.OrdinalIgnoreCase); private static readonly string DefaultConnName = "defalut"; static DBServerProvider() { SetConnection(DefaultConnName, AppSetting.DbConnectionString); } public static void SetConnection(string key, string val) { if (ConnectionPool.ContainsKey(key)) { ConnectionPool[key] = val; return; } ConnectionPool.Add(key, val); } /// /// 设置默认数据库连接 /// /// public static void SetDefaultConnection(string val) { SetConnection(DefaultConnName, val); } public static string GetConnectionString(string key) { key = key ?? DefaultConnName; if (ConnectionPool.ContainsKey(key)) { return ConnectionPool[key]; } return key; } /// /// 获取默认数据库连接 /// /// public static string GetConnectionString() { return GetConnectionString(DefaultConnName); } public static IDbConnection GetDbConnection(string connString = null) { if (connString==null) { connString = ConnectionPool[DefaultConnName]; } if (DBType.Name == DbCurrentType.MySql.ToString()) { return new MySqlConnection(connString); } if (DBType.Name == DbCurrentType.PgSql.ToString()) { return new NpgsqlConnection(connString); } return new SqlConnection(connString); } /// /// 扩展dapper 获取MSSQL数据库DbConnection,默认系统获取配置文件的DBType数据库类型, /// /// 如果connString为null 执行重载GetDbConnection(string connString = null) /// 指定连接数据库的类型:MySql/MsSql/PgSql /// public static IDbConnection GetDbConnection(string connString = null, DbCurrentType dbCurrentType=DbCurrentType.Default) { //默认获取DbConnection if (connString.IsNullOrEmpty()|| DbCurrentType.Default== dbCurrentType) { return GetDbConnection(connString); } if (dbCurrentType==DbCurrentType.MySql) { return new MySqlConnection(connString); } if (dbCurrentType == DbCurrentType.PgSql) { return new NpgsqlConnection(connString); } return new SqlConnection(connString); } public static VOLContext DbContext { get { return GetEFDbContext(); } } public static VOLContext GetEFDbContext() { return GetEFDbContext(null); } public static VOLContext GetEFDbContext(string dbName) { VOLContext context = Utilities.HttpContext.Current.RequestServices.GetService(typeof(VOLContext)) as VOLContext; if (dbName != null) { if (!ConnectionPool.ContainsKey(dbName)) { throw new Exception("数据库连接名称错误"); } context.Database.GetDbConnection().ConnectionString = ConnectionPool[dbName]; } return context; } public static void SetDbContextConnection(VOLContext beefContext, string dbName) { if (!ConnectionPool.ContainsKey(dbName)) { throw new Exception("数据库连接名称错误"); } beefContext.Database.GetDbConnection().ConnectionString = ConnectionPool[dbName]; } /// /// 获取实体的数据库连接 /// /// /// /// public static void GetDbContextConnection(VOLContext defaultDbContext) { //string connstr= defaultDbContext.Database.GetDbConnection().ConnectionString; // if (connstr != ConnectionPool[DefaultConnName]) // { // defaultDbContext.Database.GetDbConnection().ConnectionString = ConnectionPool[DefaultConnName]; // }; } public static ISqlDapper SqlDapper { get { return new SqlDapper(DefaultConnName); } } public static ISqlDapper GetSqlDapper(string dbName = null) { return new SqlDapper(dbName ?? DefaultConnName); } /// /// /// /// 指定数据库类型:MySql/MsSql/PgSql /// 指定数据连串名称 /// public static ISqlDapper GetSqlDapper(DbCurrentType dbCurrentType, string dbName = null) { if (dbName.IsNullOrEmpty()) { return new SqlDapper(dbName ?? DefaultConnName); } return new SqlDapper(dbName, dbCurrentType); } public static ISqlDapper GetSqlDapper() { //获取实体真实的数据库连接池对象名,如果不存在则用默认数据连接池名 string dbName = typeof(TEntity).GetTypeCustomValue(x => x.DBName) ?? DefaultConnName; return GetSqlDapper(dbName); } } }