简单的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{} // 工厂类: 有一个静态方法,通过该方法,能够获得指定类的对 ...
随机推荐
- 第一章: 初始JVM
跟很多人一样,我一开始接触 Java 虚拟机只是因为面试需要用到,所以硬着头皮看看.所以很多人对于为什么要学虚拟机这个问题,他们的答案都是:因为面试. 因为装逼 但我经过了几年的学习和实战,我发现其实 ...
- YOLO实践初探
学习了Andrew Ng 深度学习第三周卷积神经网络课程后,接着看了看YOLO论文,论文看得懵懵懂懂,沉不下心精雕细琢,手痒痒,迫不及待地想试一试YOLO效果.于是乎,在github上下载了ping星 ...
- 微信小程序-页面下拉
微信小程序当滑动到最顶部和最底部时,继续下拉,会将整个页面拉下去或者拉上去,本来以为是客户端自有的特性,就没去管他,直到我的禅道出现了这个记录... 其实这个问题是可以解决的,只需要在你不想出现在此情 ...
- Thymeleaf Shiro标签
记录一下 guest标签 <shiro:guest> </shiro:guest> 用户没有身份验证时显示相应信息,即游客访问信息. user标签 <shiro:user ...
- Java生成窗口
//字符串数组转变成int数组ints[i] = Integer.parseInt(str_string[i]);//设置窗口关闭Frame.addWindowListener(new WindowA ...
- web页面过一段时间再次访问时显示数据库连接错误
这个问题是我之前遇到的,过了很久才想着去解决它,因为这也没多大影响,无非就是再访问一次的问题,后来有一次观察网站的运行情况时,发现这个问题还挺严重,如果一直用,就不会出现问题,如果中间歇一会,再用就会 ...
- spring boot maven profiles,打包不同的配置文件
1. 在pom.xml添加 <profiles> <profile> <id>dev</id> <properties> <envir ...
- 再看C语言-算法
通常一个程序包括算法.数据结构.程序设计方法及语言工具和环境这四个方面.其中算法是核心,算法就是解决"做什么"和"如何做"的问题.算法是程序的灵魂,项目中如果接 ...
- 三目运算符(C++)
一.简介 固定格式 ?: 三目运算符:可用于赋值语句 三目运算表达式:<表达式1>?<表达式2>:<表达式3> 注:"?"运算符的含义是: 先求 ...
- Let’s Encrypt 通配符证书,泛域名证书申请配置
首先你可以查看下官方提供的支持申请通配符证书的客户端列表:https://letsencrypt.org/docs/client-options/. 参考链接:https://github.com/N ...