EF Core 本身不内置读写分离功能,需通过多 DbContext 实例、动态切换连接字符串或 AOP 拦截等方式实现,核心是写走主库、读走从库,并处理主从延迟与事务一致性问题。

EF Core 本身不内置读写分离功能,但可以通过配置多个 DbContext 实例、配合不同连接字符串(读库 / 写库),再结合自定义逻辑或第三方库来实现。核心思路是:写操作走主库(master),读操作尽量走从库(slave),同时保证事务一致性与数据延迟可接受。
一、基础方案:手动区分 DbContext
为读和写分别定义两个 DbContext 子类,共用同一套实体模型,但使用不同的连接字符串:
- WriteDbContext:注入主库连接字符串,用于 Add/Update/Delete 和显式事务
- ReadDbContext:注入只读从库连接字符串,仅用于查询(如 ToListAsync、FirstOrDefault)
- 两者共享相同的
OnModelCreating配置,避免映射不一致
在 DI 容器中注册时注意生命周期——通常用 Scoped 即可;若需跨请求复用(如长事务),按需调整。
二、运行时动态切换连接字符串(单 DbContext)
不拆分类型,而是在 DbContext 构造或 OnConfiguring 中根据当前操作类型选择连接字符串:
标签: session proxy microsoft .net
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~