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. 机器取代人类成为现实,Linux shell才可被取代?

    机器取代人类成为现实,Linux shell才可被取代? 新睿云 新睿云 新睿云-让云服务触手可及 本次笔者用通俗易懂的语言介绍一下Linux shell,由于笔者能力有限,如有有描述不准确的地方还请 ...

  2. VSS 使用方法

    VSS 的全称为 Visual Source Safe .作为 Microsoft Visual Studio 的一名成员,它主要任务就是负责项目文件的管理,几乎可以适用任何软件项目.管理软件开发中各 ...

  3. 小学四则运算口算练习app---No.3

    今天主要是实现按照指定的题目出题数目出题.在昨天设置页面的基础上,今天首先要学习的是接收不同页面间的参数问题.详解如下: 然后就开始我的传参和接收参数的问题! 在当前的Activity上进行跳转, 代 ...

  4. POJ2239-Selecting Courses-(匈牙利算法)

    题意:n门课,每门各自有t个开课时间,在不冲突的情况下选最多课. 题解:把周p第q节课转化为数值sum,表示在一周7*12节课中排第几节,用二分图最大匹配. #include<stdio.h&g ...

  5. mybatis学习4

    QL99中的连接查询 连接查询 交叉连接    select * from A,B; 内连接 隐式内连接   select * from A,B where 条件 显示内连接  select * fr ...

  6. LeetCode 1034. Coloring A Border

    原题链接在这里:https://leetcode.com/problems/coloring-a-border/ 题目: Given a 2-dimensional grid of integers, ...

  7. Windbg Register(寄存器)窗口的使用

    寄存器是位于在 CPU 的小易失性内存单位. 许多寄存器专用于特定用途,并可用于用户模式应用程序使用的其他寄存器. 基于 x86 和基于 x64 的处理器在有可用的寄存器的不同集合. 如何打开寄存器窗 ...

  8. [NOI2010]超级钢琴 主席树

    [NOI2010]超级钢琴 链接 luogu 思路 和12省联考的异或粽子一样. 堆维护n个左端点,每次取出来再放回去次 代码 #include <bits/stdc++.h> #defi ...

  9. [算法模板]SOS DP

    [算法模板]SOS DP 正文 SOS-DP(\(\text{Sum over Subsets}\))是用来解决这样的问题的: 其实就是子集和DP.上面每个\(F[mask]\)里面包含了\(mask ...

  10. [Gamma]Scrum Meeting#6

    github 本次会议项目由PM召开,时间为6月1日晚上10点30分 时长10分钟 任务表格 人员 昨日工作 下一步工作 木鬼 撰写博客,组织例会 撰写博客,组织例会 swoip 前端显示屏幕,翻译坐 ...