EF Core 实现读写分离的最佳方案
前言
公司之前使用Ado.net和Dapper进行数据访问层的操作, 进行读写分离也比较简单, 只要使用对应的数据库连接字符串即可. 而最近要迁移到新系统中,新系统使用.net core和EF Core进行数据访问. 所以趁着国庆假期拿出一两天时间研究了一下如何EF Core进行读写分离.
思路
根据园子里的Jeffcky大神的博客, 参考
最简单的思路就是使用手动切换EF Core上下文的连接, 即context.Database.GetDbConnection().ConnectionString = "xxx", 但必须要先创建上下文, 再关闭之前的连接, 才能进行切换
上面的两种方式都是从切换数据库连接入手,但是频繁的切换数据库连接势必会对性能造成影响. 我认为最理想的方式是要避免数据库连接的切换, 且能够适应多DbContext的情况, 在创建上下文实例时,就指定好是访问主库还是从库, 而不是在后期再进行数据库切换. 因此, 在上下文实例化时,就传入相应的数据库连接字符串, 这样一来DbContext的创建就需要交由我们自己来进行, 就不是由DI容器进行创建了. 同时仓储应该区分为只读和可读可写两种,以防止其他人对从库进行写操作.
实现
IReadOnlyRepository接口是只读仓储接口,提供查询相关方法,IRepository接口是可读可写仓储接口,提供增删查改等方法, 接口的实现就那些东西这里就省略了.
RepositoryFactory提供仓储对象的实例化
IDbProvider 接口, 根据上下文类型和配置文件中的数据库连接字符串名称创建IUnitOfWork, 在DI中的生命周期是Scoped,在销毁的同时会销毁数据库上下文对象, 下面是它的实现, 为了提高性能使用了Expression来代替反射.
总结
本文给出的解决方案适用于系统中存在多个不同的上下文,能够适应复杂的业务场景.但对已有代码的侵入性比较大,不知道有没有更好的方案,欢迎一起探讨.
原文链接:https://www.cnblogs.com/KiraYoshikage/p/11628781.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
EF Core 实现读写分离的最佳方案相关推荐
- EntityFramework Core进行读写分离最佳实践方式,了解一下(二)?
写过上一篇关于EF Core中读写分离最佳实践方式后,虽然在一定程度上改善了问题,但是在评论中有的指出更换到从数据库. 那么接下来要进行插入此时又要切换到主数据库,同时有的指出是否可以进行底层无感知操 ...
- EntityFramework Core进行读写分离最佳实践方式,了解一下?
本来打算写ASP.NET Core MVC基础系列内容,博客评论有园友提出讲讲读写分离,这个问题提的好. 大多数情况下,对于园友在评论中提出的问题,如果是值得深究或者大多数同行比较关注的问题我都会私下 ...
- mysql主从授权_MySQL主从复制(10)读写分离授权多种方案
一.生产场景mysql主从复制读写分离授权方案及实战 当配置和好MySQL主从复制以后,所有对数据库内容的更新就必须在主服务器上进行. 那么,为什么所有的更新都要在主服务器上进行呢?这是因为数据复制是 ...
- ef mysql 读写分离_基于 EntityFramework 的数据库主从读写分离服务插件
基于 EntityFramework 的数据库主从读写分离服务插件 1. 版本信息和源码 1.1版本信息 v1.01 beta(2015-04-07),基于 EF 6.1 开发,支持 EF 6.1 之 ...
- sql server几种读写分离方案的比较
原文:sql server几种读写分离方案的比较 在生产环境中我们经常会遇到这种情况: 前端的oltp业务很繁忙,但是需要对这些运营数据进行olap,为了不影响前端正常业务,所以需要将数据库进行读写分 ...
- 【架构设计】读写分离、动静分离
文章目录 读写分离 为什么要读写分离? 如何实现读写分离? 为什么一个主库多个从库? 是否有缺点? 如何解决延迟问题? 具体如何实现? 实现 读写分离与cqrs的区别 动静分离 什么是动静分离 使用n ...
- CentoOS7.9搭建mysql5.7分布式集群+主从复制+读写分离知识整理
一.集群介绍 MySQL的高可用架构无论是社区还是官方,一直在技术上进行探索,这么多年提出了多种解决方案,比如MMM, MHA, NDB Cluster, Galera Cluster, InnoDB ...
- 解决数据库读写分离(转)
如何配置mysql数据库的主从? 单机配置mysql主从:http://my.oschina.net/god/blog/496 常见的解决数据库读写分离有两种方案 1.应用层 http://neore ...
- .net core发布 正在发现数据上下文_使用EF Core实现数据库读写分离
以下文章来源于朝夕Net社区 ,作者Eleven 朝夕Net社区 朝气.丰富.活跃的.Net社区,朝夕教育携百万粉丝共同打造!有技术,有感悟,有新闻,有照片,有故事,还有梦想! [精选转载]| 作者/ ...
最新文章
- 认识python(了解)
- QuickLook搭配Everthing提高工作效率
- java8 LocalDate 日期比较大小
- 1.15 Java访问控制修饰符(public、 private、protected 和 friendly)
- 使用安全Cookies-笔记
- linux浏览器不能播放音频文件夹,在html中插入音频文件在浏览器中播放音频文件的兼容性问题...
- Android入门(二) | 项目目录及主要文件作用分析
- html模态窗口调试,在模态窗口中显示HTML标记
- Spring中bean属性注入方式总结:构造方法、setter注入、p命令空间注入、SpEL注入、集合注入
- 积分与坐标变换(极坐标)
- Android studio打包遇到的问题总结
- 泛型列表(List)的搜索和排序
- for的循环在php那边使用,for循环如何在php怎么中使用
- 用Java语言编写ajax设计模式_《松本行弘的程序世界》读书笔记(上)——面向对象、程序块、设计模式、ajax...
- 关于vivo手机调试安装“解析程序包时出现问题”的解决方案
- 苹果开发:开发证书都显示“此证书的签发者无效”的解决方法
- 输入两个正整数num1、num2,计算并输出它们的和、差、积、整数商和余数
- 共享充电宝的优点有哪些
- tomcat报错 Unable to process Jar entry
- 浅谈数字媒体艺术中的技术应用-1-技术概述