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<string, string> ConnectionPool = new Dictionary<string, string>(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); } /// <summary> /// 设置默认数æ®åº“连接 /// </summary> /// <param name="val"></param> 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; } /// <summary> /// 获å–默认数æ®åº“连接 /// </summary> /// <returns></returns> 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); } /// <summary> /// 扩展dapper 获å–MSSQLæ•°æ®åº“DbConnection,默认系统获å–é…置文件的DBTypeæ•°æ®åº“类型, /// </summary> /// <param name="connString">如果connString为null 执行é‡è½½GetDbConnection(string connString = null)</param> /// <param name="dapperType">指定连接数æ®åº“的类型:MySql/MsSql/PgSql</param> /// <returns></returns> 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]; } /// <summary> /// 获å–实体的数æ®åº“连接 /// </summary> /// <typeparam name="TEntity"></typeparam> /// <param name="defaultDbContext"></param> /// <returns></returns> public static void GetDbContextConnection<TEntity>(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); } /// <summary> /// /// </summary> /// <param name="dbCurrentType">指定数æ®åº“类型:MySql/MsSql/PgSql</param> /// <param name="dbName">指定数æ®è¿žä¸²åç§°</param> /// <returns></returns> 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<TEntity>() { //获å–实体真实的数æ®åº“è¿žæŽ¥æ± å¯¹è±¡å,如果ä¸å˜åœ¨åˆ™ç”¨é»˜è®¤æ•°æ®è¿žæŽ¥æ± å string dbName = typeof(TEntity).GetTypeCustomValue<DBConnectionAttribute>(x => x.DBName) ?? DefaultConnName; return GetSqlDapper(dbName); } } }