简单的DbContext工厂类(EFCore)
前言
根据appsettings.json的中配置的数据库类型,使用工厂模式创建DbContext
代码实现
appsettings.json中的配置项
  //使用的数据库类型
  "ServerType": "oracle",
  "OracleSettings": {
    "PROTOCOL": "tcp",
    "HOST": "XX.XX.XX.XX",
    "PORT": "XX",
    "SERVICE_NAME": "XX",
    "UserId": "XX",
    "Password": "XX"
  },
  "MySQLSettings": {
    "HOST": "XX",
    "PORT": "XX",
    "DataBase": "XX",
    "UserId": "XX",
    "Password": "XX"
  }
DbContext工厂
DbContextFactory
    public class DbContextFactory
    {
        public static DbContext CreateContext()
        {
            DbContext dbContext = null;
            string dbType = AppConfigurtaionServices.Configuration["ServerType"];
            switch (dbType)
            {
                case "mysql":
                    dbContext = CreateMySQLContext();
                    break;
                case "oracle":
                    dbContext = CreateOracleContext();
                    break;
            }
            return dbContext;
        }
        #region 创建dbContext
        /// <summary>
        /// 创建ORACLE Dbcontext
        /// </summary>
        /// <returns></returns>
        static DbContext CreateOracleContext()
        {
            DbContextOptions<OracleContext> options = new DbContextOptions<OracleContext>();
            OracleContext oracleContext = new OracleContext(options);
            return oracleContext;
        }
        /// <summary>
        /// 创建MySQL Dbcontext
        /// </summary>
        /// <returns></returns>
        static DbContext CreateMySQLContext()
        {
            DbContextOptions<MySQLContext> options = new DbContextOptions<MySQLContext>();
            MySQLContext mySQLContext = new MySQLContext(options);
            return mySQLContext;
        }
        #endregion
    }
AppConfigurtaionServices
    public class AppConfigurtaionServices
    {
        public static IConfiguration Configuration { get; set; }
        static AppConfigurtaionServices()
        {
            //ReloadOnChange = true 当appsettings.json被修改时重新加载       
            Configuration = new ConfigurationBuilder()
            .Add(new JsonConfigurationSource { Path = "appsettings.json", ReloadOnChange = true })
            .Build();
        }
    }
OracleContext示例
    public class OracleContext : DbContext
    {
        public OracleContext(DbContextOptions<OracleContext> options) : base(options)
        { }
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            string PROTOCOL = AppConfigurtaionServices.Configuration["OracleSettings:PROTOCOL"];
            string HOST = AppConfigurtaionServices.Configuration["OracleSettings:HOST"];
            string PORT = AppConfigurtaionServices.Configuration["OracleSettings:PORT"];
            string SERVICE_NAME = AppConfigurtaionServices.Configuration["OracleSettings:SERVICE_NAME"];
            string UserId = AppConfigurtaionServices.Configuration["OracleSettings:UserId"];
            string Password = AppConfigurtaionServices.Configuration["OracleSettings:Password"];
            optionsBuilder.UseOracle(
                "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = " + PROTOCOL + ")(HOST = " + HOST + ")(PORT = " + PORT + "))(CONNECT_DATA = (SERVICE_NAME = " + SERVICE_NAME + "))); User Id = " + UserId + "; Password = " + Password + "; ");
            base.OnConfiguring(optionsBuilder);
        }
    }
简单的DbContext工厂类(EFCore)的更多相关文章
- 重构第19天 提取工厂类(Extract Factory Class)
		理解:本文中的“提取工厂类”是指如果要创建的对象很多,则代码会变的很复杂.一种很好的方法就是提取工厂类. 详解:一般来说我们需要在代码中设置一些对象,以便获得它们的状态,从而使用对象,所谓的设置通常来 ... 
- 重构19-Extract Factory Class(提取工厂类)
		在代码中,通常需要一些复杂的对象创建工作,以使这些对象达到一种可以使用的状态.通常情况下,这种创建不过是新建对象实例,并以我们需要的方式进行工作.但是,有时候这种创建对象的需求会极具增长,并且混淆了创 ... 
- java工厂类与反射机制
		java 简单工厂类 2012-04-22 15:44:07| 分类: java | 标签:java工厂类 简单工厂类 |举报|字号 订阅 简单工厂模式需要由以下角色组成: 接口 ... 
- 工厂类分离与java反射机制
		网易 博客 发现 小组 风格 手机博客 玩LOFTER,免费冲印20张照片!> 创建博客登录 加关注 黙言-在路上 奋斗 首页 日志 相册 音乐 收藏 博友 关于我 黙 ... 
- Executor框架(五)Executors工厂类
		Executors 简介 Executors 是一个工厂类,其提供的是Executor.ExecutorService.ScheduledExecutorService.ThreadFactory 和 ... 
- Executor(二)ThreadPoolExecutor、ScheduledThreadPoolExecutor 及 Executors 工厂类
		Executor(二)ThreadPoolExecutor.ScheduledThreadPoolExecutor 及 Executors 工厂类 Java 中的线程池类有两个,分别是:ThreadP ... 
- (精简)Spring框架的IoC(替代工厂类实现方法)和AOP(定义规则,约定大于配置)
		Spring的核心框架主要包含两个技术,分别用来处理工厂类,以及事务处理和连接管理的. 两大核心概念 1) IoC:控制反转,在现在的开发中,如果想建立对象并设置属性,是需要先new对象,再通过se ... 
- 【Java 多线程】Java线程池类ThreadPoolExecutor、ScheduledThreadPoolExecutor及Executors工厂类
		Java中的线程池类有两个,分别是:ThreadPoolExecutor和ScheduledThreadPoolExecutor,这两个类都继承自ExecutorService.利用这两个类,可以创建 ... 
- php : 工厂类演示
		工厂类的目的: 通过类名, 动态创建该类的对象实例 <?php /* * 工厂类演示 */ class A{} class B{} // 工厂类: 有一个静态方法,通过该方法,能够获得指定类的对 ... 
随机推荐
- python 简单逻辑回归实例
			import sys reload(sys) sys.setdefaultencoding('utf-8') from sklearn.feature_extraction.text import T ... 
- PSO 粒子群算法
			注:本人参考http://www.cnblogs.com/tiandsp/category/348031.html来实现的 算法步骤: 1.首先确定粒子个数与迭代次数. 2.对每个粒子随机初始化位置与 ... 
- PHP功能代码片段
			1.连接MYSQL数据库代码 <?php $connec=mysql_connect("localhost","root","root&qu ... 
- eclipse 再见,android studio 新手入门教程(三)Github(ignore 忽略规则)的使用
			上传代码到github android studio里集成了上传代码到github的功能,所以使用上还是很简单的,设置里添加账号并测试,之后就可以很方便地上传代码到github了 如果你的项目是使用a ... 
- java函数方法学习
			1.函数(方法)定义 类中特定功能小程序 2.函数定义格式 修饰符 返回值类型 函数名 (参数类型 形式参数) { 执行语句; return 返回值 } 函数功能实现的2个明确 1.这个功能的结果是什 ... 
- SpringBoot整合Shiro权限框架实战
			什么是ACL和RBAC ACL Access Control list:访问控制列表 优点:简单易用,开发便捷 缺点:用户和权限直接挂钩,导致在授予时的复杂性,比较分散,不便于管理 例子:常见的文件系 ... 
- HotSpot学习(二):虚拟机的启动过程源码解析
			1. 前言 上文介绍了HotSpot编译和调试的方法,而这篇文章将迈出正式调试的第一步--调试HotSpot的启动过程. 学习启动过程可以帮助我们了解程序的入口,并对虚拟机的运行有个整体的把握,方便日 ... 
- 漫画|web的主要安全问题
			在此主要说现在市面上存在的4个比较多的安全问题 一.钓鱼 钓鱼: 比较有诱惑性的标题 仿冒真实网站 骗取用户账号 骗取用户资料 二.篡改页面 有一大部分被黑的网站中会有关键字 (在被黑的网站中,用的最 ... 
- shell实现99乘法表
			#!/usr/bin/env sh for ((x=1;x<10;x++));do for ((y=1;x>=y;y++));do printf "${y}x${x}=$(exp ... 
- springboot源码解析-管中窥豹系列之Runner(三)
			一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot ... 
