public class ManagementDBContext : DbContext
    {
        public static string configString = ConfigHelper.GetDatabase;
        public ManagementDBContext() : base(configString)
        {
            Database.SetInitializer<ManagementDBContext>(null);
        }
        /// <summary>
        /// 模型的创建
        /// </summary>
        /// <param name="modelBuilder"></param>
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            // 判断使用的数据库动态控制 Schema
            if (ConfigHelper.GetDBType == Enums.Database.Oracle)
            {
                string schema = GetConfiguration("USER ID");
                modelBuilder.HasDefaultSchema(schema);
                modelBuilder.Types().Configure(entity => entity.ToTable(entity.ClrType.Name, schema));
            }
        }
        /// <summary>
        /// 获取配置连接串
        /// </summary>
        /// <param name="str">要取的字符名称</param>
        /// <returns></returns>
        private static string GetConfiguration(string str)
        {
            if (string.IsNullOrEmpty(str)) str = str.ToUpper();
            string con = ConfigHelper.GetConStrings(configString);
            string[] strSplit = con.Split(';');
            Dictionary<string, string> attribList = new Dictionary<string, string>();
            for (int i = 0; i != strSplit.Length; i++)
            {
                string[] attribValue = strSplit[i].Split('=');
                attribList.Add(attribValue[0], attribValue[1]);
            }
            return attribList[str];
        }
        /// <summary>
        /// 导入Excel
        /// </summary>
        public DbSet<ImportExcel> importExcel { get; set; }
    }
 
webconfig 内容
  <connectionStrings>
    <add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=Teest;Password=Test123;Data Source=localhost:1521/orcl" />
    <!--<add name="DefaultConnection" connectionString="Data Source=.;Initial Catalog=databaseLog;Persist Security Info=True;MultipleActiveResultSets=True;Pooling=true;Max Pool Size=512;Min Pool Size=5;Connection Timeout=120" providerName="System.Data.SqlClient" />-->
    <add name="DefaultConnection" connectionString="server=.;database=ManageDB;user id=sa;pwd=sa" providerName="System.Data.SqlClient" />
  </connectionStrings>
 
 
WebConfig 里配置
    <!-- 指定连接数据库 SqlServer/Oracle|0/1-->
    <add key="Database" value="0" />
 
    /// <summary>
    /// 读取配置工具类
    /// </summary>
    public class ConfigHelper
    {
        private static string temp = string.Empty;
        private static string database = ConfigurationManager.AppSettings["Database"].ToString().Trim();
        private static string upload = ConfigurationManager.AppSettings[StringHelper.UPLOAD.ToLower()].ToString().Trim();
        private static string project = AppDomain.CurrentDomain.BaseDirectory.Replace("\\", "/").ToString();
        /// <summary>
        /// 获取链接的数据库
        /// </summary>
        public static string GetDatabase
        {
            get
            {
                if (!string.IsNullOrEmpty(database))
                    return GetConnectionDefaultName(database);
                else return GetConnectionStrings(StringHelper.WEBCONFIG);
            }
        }
        /// <summary>
        /// 读取xml节点名称,返回数据库连接名称
        /// </summary>
        /// <param name="xmlNodeName"></param>
        /// <returns></returns>
        private static string GetConnectionStrings(string fileName)
        {
            string[] array = null;
            XmlDocument doc = new XmlDocument();
            temp = project + fileName;
            if (!FileHelper.FileExists(temp)) return temp;
            doc.Load(temp);
            XmlNodeList nodeList = doc.DocumentElement.ChildNodes;
            if (nodeList.Count > 0)
                foreach (XmlNode node in nodeList)
                {
                    if (node.LocalName.ToLower() != StringHelper.CONNECTIONSTRINGS.ToLower())
                        continue;
                    array = node.InnerXml.Split('>');
                    array = array[0].Replace("\"", "").Split(' ');
                    foreach (var arr in array)
                    {
                        if (arr.ToLower().Contains(StringHelper.NAME.ToLower()))
                        {
                            array = arr.Split('=');
                            break;
                        }
                    }
                }
            return temp = array == null ? null : array[1];
        }
        /// <summary>
        /// 动态获取Web.config 中的链接数据库名称
        /// </summary>
        /// <param name="sqlName"></param>
        /// <returns></returns>
        public static string GetConnectionDefaultName(string sqlName)
        {
            string[] array = null;
            XmlDocument doc = new XmlDocument();
            temp = project + StringHelper.WEBCONFIG;
            if (!FileHelper.FileExists(temp)) return temp;
            doc.Load(temp);
            temp = GetDataBaseName(sqlName);
            XmlNodeList nodeList = doc.DocumentElement.ChildNodes;
            if (nodeList.Count > 0)
            {
                foreach (XmlNode node in nodeList)
                {
                    if (node.LocalName.ToLower() == StringHelper.CONNECTIONSTRINGS.ToLower())
                    {
                        array = node.InnerXml.Split('>');
                        break;
                    }
                }
            }
            if (array.Length > 0)
            {
                for (int i = 0; i < array.Length - 1; i++)
                {
                    if (array[i].ToLower().Contains(temp))
                    {
                        temp = array[i];
                        break;
                    }
                }
            }
            array = temp.Replace("\"", "").Split(' ');
            foreach (var arr in array)
            {
                if (arr.ToLower().Contains(StringHelper.NAME.ToLower()))
                {
                    array = arr.Split('=');
                    break;
                }
            }
            return temp = array == null ? null : array[1];
        }
        /// <summary>
        /// 获取上传文件物理路径
        /// </summary>
        public static string GetPhysicalPath
        {
            get
            {
                if (!string.IsNullOrEmpty(upload))
                    return project + upload;
                else
                    return project + StringHelper.UPLOAD.ToLower();
            }
        }
        /// <summary>
        /// 获取服务器文件路径
        /// </summary>
        public static string GetServicePath
        {
            get
            {
                return FileHelper.IsObliqueBar(GetService) + StringHelper.UPLOAD.ToLower();
            }
        }
        /// <summary>
        /// 获取当前项目地址以及端口号
        /// </summary>
        public static string GetService
        {
            get
            {
                return StringHelper.HTTP.ToLower() + "://" + StringHelper.SERVER_NAME + ":" + StringHelper.SERVER_PORT;
            }
        }
        /// <summary>
        /// 获取链接数据库字符串
        /// </summary>
        /// <param name="conName">数据库链接名称</param>
        /// <returns></returns>
        public static string GetConStrings(string conn)
        {
            if (!string.IsNullOrEmpty(conn))
                return ConfigurationManager.ConnectionStrings[conn].ToString().ToUpper();
            else
                return conn;
        }
        /// <summary>
        /// 获取当前使用的数据库
        /// </summary>
        /// <returns></returns>
        public static string GetDataBaseName(string dbName)
        {
            try
            {
                temp = dbName.ToLower() == StringHelper.ORACLE.ToLower() ? StringHelper.ORACLE.ToLower() :
                    dbName.ToLower() == StringHelper.SQLSERVER.ToLower() ? StringHelper.SQLCLIENT.ToLower() :
                    Convert.ToInt32(dbName.ToLower()) == Convert.ToInt32(Database.SqlServer) ? StringHelper.SQLCLIENT.ToLower() :
                    Convert.ToInt32(dbName.ToLower()) == Convert.ToInt32(Database.Oracle) ? StringHelper.ORACLE.ToLower() : StringHelper.SQLCLIENT.ToLower();
            }
            catch (Exception)
            {
                temp = StringHelper.SQLCLIENT.ToLower();
            }
            return temp;
        }
        /// <summary>
        /// 获取链接数据库类型
        /// </summary>
        public static Database GetDBType
        {
            get
            {
                return GetDatabaseType(database);
            }
        }
        /// <summary>
        /// 以枚举类型返回数据库类型
        /// </summary>
        /// <param name="dbType"></param>
        /// <returns></returns>
        public static Database GetDatabaseType(string dbType)
        {
            try
            {
                return dbType.ToLower() == StringHelper.ORACLE.ToLower() ? Database.Oracle :
                    dbType.ToLower() == StringHelper.SQLSERVER.ToLower() ? Database.SqlServer :
                    Convert.ToInt32(dbType.ToLower()) == Convert.ToInt32(Database.SqlServer) ? Database.SqlServer :
                    Convert.ToInt32(dbType.ToLower()) == Convert.ToInt32(Database.Oracle) ? Database.Oracle : Database.SqlServer;
            }
            catch (Exception)
            {
                return Database.SqlServer;
            }
        }
    }
 特别注意的地方就是实体类
 

EntityFramework DBContext 类动态控制 数据库连接(支持Oracle,SQL server)的更多相关文章

  1. mysql,oracle,sql server数据库默认的端口号,端口号可以为负数吗?以及常用协议所对应的缺省端口号

    mysql,oracle,sql server数据库默认的端口号? mysql:3306 Oracle:1521 sql server:1433 端口号可以为负吗? 不可以,端口号都有范围的,0~65 ...

  2. SQL Server 2012不支持从SQL Server 2000的备份进行还原

    错误: dbbackup failed: Unable to restore database 'ppt'Not valid backupThe database was backed up on a ...

  3. 介绍几种大型的Oracle/SQL Server数据库免费版

    我们知道,Oracle和SQL Server等大型数据库也都存在一些免费的版本,这些免费的版本已经能够满足许多中小项目的需求.对于在校大学生来说,从学习的目标上来讲,安装免费版的大型数据库也就足够用了 ...

  4. Oracle,SQL Server 数据库较MySql数据库,Sql语句差异

    原文:Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 1.关系型数据库 百度百科 关系数据库 ...

  5. 查询获取所有数据库名及数据库中表的集合、数据库连接字符串(类生成器,暂时支持mysql,sql server,后期有oracle再更新)

    现所在公司做项目开发时,经常会自己创建model类,网上的生成器也很多,完全满足自己的不太现实,所以感觉自己做一个更有底气,主要针对过程中的一些语句进行整理,也供其他人学习参考. 连接字符串: mys ...

  6. Oracle & SQL Server 数据传输

    在开发中用到的Oracle与SQL Server间数据传输的不同方法的整理,比较.包括原理的简介,配置和实现方法,优缺点的比较,使用平台和DB,适合的应用范围和效能的比较. 整理的方法有如下六种: 1 ...

  7. 招聘 微软全球技术支持中心 sql server组

    微软亚太区全球技术支持中心(APGC CSS)是微软为个人用户.开发者.IT 专业人员到合作伙伴和企业级合作伙伴提供全方位.多元化的服务和技术支持的部门.一个优秀的SQL Server技术支持工程师应 ...

  8. 使用sql查询mysql/oracle/sql server/gp数据库中指定表的字段信息(字段名/字段类型/字段长度/是否是主键/是否为空)

    1,根据数据库类型拼接不同URL /** * 根据类型不同拼接连接的URL * @param dbType 1:mysql.2:oracle.3:sql server.4:gp * @param ip ...

  9. mysql,oracle,sql server中的默认事务隔离级别查看,更改

    未提交读(隔离事务的最低级别,只能保证不读取物理上损坏的数据) 已提交读(数据库引擎的默认级别) 可重复读 可序列化(隔离事务的最高级别,事务之间完全隔离) 可串行化比较严谨,级别高; MySQL m ...

随机推荐

  1. 使用adb 命令(atrace)抓起systrace的方法。

    adb shell atrace -c -b --async_start -z gfx 1. 执行查看adb shell atrace 功能 atrace --h atrace: invalid op ...

  2. 关于Visual Studio源代码文件的行尾

    我们都知道,UNIX只使用换行符(linefeed)来结束每一行,而DOS传统上使用CR+LF来结束每一行,Visual Studio应该完全在DOS世界中,但不管出于什么原因,当我们从代码服务器上获 ...

  3. 原语:从0到1,从硬件指令集到OS原语,锁原语的哲学

    在道家的世界观中,无极生太极,是这个世界的从0到1. 天地之道,以阴阳二气造化万物.天地.日月.雷电.风雨.四时.于前午后,以及雄雌.刚柔.动静.显敛,万事万物,莫不分阴阳.人生之理,以阴阳二气长养百 ...

  4. [Python] Python 获取中文的首字母 和 全部拼音首字母

    Python 获取中文的首字母 和 全部拼音首字母 代码如下: import pinyin def getStrAllAplha(str): return pinyin.get_initial(str ...

  5. ZROI 暑期高端峰会 A班 Day5 杂题选讲

    CF469E \(n\) 个需要表示的数,请使用最少的 \(2^k\) 或 \(-2^k\) 表示出所有需要表示的数.输出方案. \(n\le 10^5,|a_i|\le 10^5\). 首先每个数肯 ...

  6. nginx 日志之 access_log分割

    如果任由访问日志写下去,日志文件会变得越来越大,甚至是写满磁盘. 所以,我们需要想办法把日志做切割,比如每天生成一个新的日志,旧的日志按规定时间删除即可. 实现日志切割可以通过写shell脚本或者系统 ...

  7. zabbix解决监控图形中文乱码

    原文: https://blog.csdn.net/xujiamin0022016/article/details/86541783 zabbix 4解决监控图形中文乱码首先在windows里找到你想 ...

  8. 配置Nginx的防盗链

    实验环境 一台最小化安装的CentOS 7.3虚拟机 配置:1核心/512MB nginx版本1.12.2 一.配置盗链网站 1.启动一台nginx虚拟机,配置两个网站 vim /etc/nginx/ ...

  9. 秘制牛肉Gamma阶段项目展示

    秘制牛肉Gamma阶段项目展示 1.团队成员和个人博客 · 左顺:在项目中主要负责后端开发.个人博客 · 袁勤:精通网页项目开发,前端后端都很强,在完成自己后端任务后也会积极帮助其他人的任务.个人博客 ...

  10. c语言之连接符

    c语言之连接符 1.连接符 连接符的概念是结合define预编译指令的使用技巧,用户可以向define中传入字符串来调用不同功能的函数. 2.代码例子 #include <stdio.h> ...