营销型电子商务网站,企业营销策划的基本原则是,广州做网站哪个公司做得好,网络科技公司骗术写过上一篇关于EF Core中读写分离最佳实践方式后#xff0c;虽然在一定程度上改善了问题#xff0c;但是在评论中有的指出更换到从数据库。那么接下来要进行插入此时又要切换到主数据库#xff0c;同时有的指出是否可以进行底层无感知操作#xff0c;这确实是个问题#x… 写过上一篇关于EF Core中读写分离最佳实践方式后虽然在一定程度上改善了问题但是在评论中有的指出更换到从数据库。那么接下来要进行插入此时又要切换到主数据库同时有的指出是否可以进行底层无感知操作这确实是个问题本文继续进行引路进一步改善评论中问题的指出至于实现更复杂的逻辑可自行实现。在EF 6.x中我们知道有IDbCommandInterceptor接口我们可对执行的SQL语句进行拦截从而可自定义实现我们想要的需求。虽然在EF Core中却没有拦截器特性的实现但是针对此特性的实现DiagnosticSource记录跟踪类来实现等效于拦截器的实现当前DiagnosticSource使用文档尚未完善估计还得等待一段时间接下来我们来看看如何实现。在DiagnosticSource包中有DiagnosticListener类我们通过此类来跟踪记录如果执行的EF Core包那么我们将利用DiagnosticListener进行订阅订阅到之后我们拿到跟踪命令从而实现无感知更换数据库代码如下这里存在一个问题上述 command.CommandText.Contains(ROWCOUNT) 代码因为在进行添加操作时会返回主键那么此时会进行查询所以暂时没有更好的方式是确认主-从数据库。上述 DbLoggerCategory.Name 也就是 Microsoft.EntityFrameworkCore 通过监控的包是Microsoft.EntityFrameworkCore则进行订阅最后我们在startup中进行注册该监听类。接下来我们通过动态图来看看最终实际效果主-从复制依然是通过SQL Server发布-订阅的方式来同步数据。在控制器中我们只利用demo1上下文来添加和查询数据当查询时更换到从数据库此时已是无感知请见上一篇如下本文只是在上一篇的基础上进一步改善了读写分离的操作通过跟踪记录从底层出发来完善读写分离操作我们可拿到底层实现的命令以及其他和EF 6.x中利用拦截器等效至于更加复杂的逻辑可自行实现。