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. 微信小程序,相关代码

    table th:nth-of-type(1) { width: 200px; } 代码 作用 bindtap bindload 当图片载入完毕时触发,event.detail = {height, ...

  2. robotframework连接mysql

    1.安装mysql数据库,并启动,创建数据库test及user表(可以自定义) 2.配置robotframework环境加载DatabaseLibrary 3.安装pymysql,下载地址:https ...

  3. luoguP4197:Peaks(Kruskal重构树+主席树)或者(点分树+离线)

    题意:有N座山,M条道路.山有山高,路有困难值(即点权和边权).现在Q次询问,每次给出(v,p),让求从v出发,只能结果边权<=p的边,问能够到达的山中,第K高的高度(从大到小排序). 思路:显 ...

  4. scapy 中sniff指定的数据包并打印指定信息

    在理解这篇文章前可以先看看这两篇文章: https://www.cnblogs.com/liyuanhong/p/10925582.html https://www.cnblogs.com/liyua ...

  5. ZJOI2019赛季回顾

    退役了. NOIP2018 day1没什么好说的. day2开考后看完题:这个T3 TM不是DDP吗? 考前刚学过这东西,还没去写过 当时不知道在想什么,胡了T1 60和T2 50分保底之后就去刚T3 ...

  6. [codevs3044]矩形面积求并

    题目描述 Description 输入n个矩形,求他们总共占地面积(也就是求一下面积的并) 输入描述 Input Description 可能有多组数据,读到n=0为止(不超过15组) 每组数据第一行 ...

  7. axios二次封装

    import axios from "axios" //请求拦截器 axios.interceptors.request.use(function (config) { retur ...

  8. Seminar Schedule

    Seminar Schedule (C2017 | 2019.9-12 | 3rd semester S0500783) *************************************** ...

  9. 深入解析ES6中的promise

    作者 | Jeskson来源 | 达达前端小酒馆 什么是Promise Promise对象是用于表示一个异步操作的最终状态(完成或失败)以及其返回的值. 什么是同步,异步 同步任务会阻塞程序的执行,如 ...

  10. C/C++中书写汇编指令

    汇编语言的指令格式目前有两种不同的标准:Windows下的汇编语言基本上都遵循Intel风格的语法,比如:MASM.NASM,Unix/Linux下的汇编语言基本上都遵循AT&T风格的语法. ...