EFCore ORM CodeFirst读写分离
时间:2021-08-07
本文章向大家介绍EFCore ORM CodeFirst读写分离,主要包括EFCore ORM CodeFirst读写分离使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
public class EFCoreDbContext:DbContext { private string strConn = "Server=.;Database=EFCoreDB01;Trusted_Connection=True"; public EFCoreDbContext(string strConn) { this.strConn = strConn; //strConns.ad } /// <summary> /// 每一个表对应数据库映射 /// </summary> public DbSet<UserInfo> UserInfo { get; set; } /// <summary> /// 配置数据库连接 /// </summary> /// <param name="optionsBuilder"></param> protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { //Nuget引入:Microsoft.EntityFrameworkCore.SqlServer optionsBuilder.UseSqlServer(strConn);//数据库连接 } /// <summary> /// 配置数据库结构,关系映射 /// </summary> /// <param name="modelBuilder"></param> protected override void OnModelCreating(ModelBuilder modelBuilder) { //初始化数据库 modelBuilder.Entity<UserInfo>().HasData(new List<UserInfo>() { new UserInfo() { UserId=1, UserName="张三", Description="好学生", UserAge=33 }, new UserInfo() { UserId=2, UserName="李三", Description="不太好学生", UserAge=31 }, new UserInfo() { UserId=3, UserName="王五", Description="学生", UserAge=34 } }); } }
生成数据库
1,通过Api生成(下面方法)
2,工具生成
3,迁移文件生成
EFCoreDbContext context = new EFCoreDbContext(); context.Database.EnsureDeleted();//判断如果有数据库,就删除数据库 context.Database.EnsureCreated();//创建一个新的数据库
单Context 多数据库连接 管理
public class EFCoreContextFactory { private const string writeConnection = "Server=.;Database=EFCoreDB01;Trusted_Connection=True"; public static List<string> strConns = new List<string>() { "Server=.;Database=EFCoreDB01_Read01;Trusted_Connection=True", "Server=.;Database=EFCoreDB01_Read02;Trusted_Connection=True" }; private static EFCoreDbContext context=null; public static EFCoreDbContext createDbContext(WriteOrRead writeOrRead) { switch (writeOrRead) { case WriteOrRead.Write: context = new EFCoreDbContext(writeConnection); break; //主库连接 case WriteOrRead.Read: context= new EFCoreDbContext(GetReadConnect()); //从库连接 break; default: break; } return context; } //1,当前请求数量 private static int _currentRequestCount = 0; private static string GetReadConnect() { //定义一个轮询策略 //根据请求量来取模 int currentIndex = _currentRequestCount % strConns.Count; _currentRequestCount++; return strConns[currentIndex]; //定义一个随机策略 // int i = new Random().Next(0, strConns.Count); // return strConns[i]; } } public enum WriteOrRead { Write, Read }
测试代码
{ EFCoreDbContext context = EFCoreContextFactory.createDbContext(WriteOrRead.Read); UserInfo user = context.UserInfo.Find(2); } { EFCoreDbContext context = EFCoreContextFactory.createDbContext(WriteOrRead.Read); UserInfo user = context.UserInfo.Find(2); } { EFCoreDbContext context = EFCoreContextFactory.createDbContext(WriteOrRead.Read); UserInfo user = context.UserInfo.Find(2); } { EFCoreDbContext context = EFCoreContextFactory.createDbContext(WriteOrRead.Read); UserInfo user = context.UserInfo.Find(2); }
原文地址:https://www.cnblogs.com/qingjiawen/p/15111764.html
- dataguard备库的数据文件的迁移实战(r8笔记第24天)
- Hive的left join、left outer join和left semi join三者的区别
- 52. Socket Server 自定义协议的简单实现 | 厚土Go学习笔记
- dataguard备库的数据文件的迁移(r8笔记第22天)
- 46. 实现一个简单的网络爬虫 | 厚土Go学习笔记
- 45. sync.Mutex 互斥和互斥锁 | 厚土Go学习笔记
- golang进度条
- 44. goroutine、channel、time的例子 | 厚土Go学习笔记
- AVL二叉树
- Golang:使用 httprouter 构建 API 服务器
- dataguard中需要注意的一些数据文件操作(r8笔记第21天)
- 42. select 的默认分支 | 厚土Go学习笔记
- 执行计划变化导致CPU负载高的问题分析 (r8笔记第20天)
- 数据结构基础(2) --顺序查找 ; 二分查找
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法