当前位置: 首页 > news >正文

网站策划方案论文/怎么在百度上发布自己的信息

网站策划方案论文,怎么在百度上发布自己的信息,飓风算法受影响的网站有哪些,俱乐部网站 模板上一讲中简单介绍了一个EF环境下通过DbCommand拦截器来实现SQLSERVER的读写分离,只是一个最简单的实现,而如果出现事务情况,还是会有一些问题的,因为在拦截器中我们手动开启了Connection链接,而在一个W&…

上一讲中简单介绍了一个EF环境下通过DbCommand拦截器来实现SQLSERVER的读写分离,只是一个最简单的实现,而如果出现事务情况,还是会有一些问题的,因为在拦截器中我们手动开启了Connection链接,而在一个WEB请求时,如果你的一个变量即用到了read库又用到了write库,就会导致到sqlserver端的spid(system process id,系统进程ID,sqlserver里可能是某个数据库进程序的ID)发生变化 ,而对于这种变化,原本是本地的事务就会自动提升为分布式事务,对MSDTC不了解的同学,可能看我的相关文章,所以,我们使用拦截实现读写分离后,在程序里,你的读和写的仓储对象要分别定义,不能共享,而且,你在事务里所以写的仓储对象都要使用同一个数据上下文!

当你按着我说的做后,本地事务就不会提升为msdtc了,如图:

今天我在DbCommand拦截器进行了优化,下面共享一下代码,如是测试不是真实一项目代码

    /// <summary>/// SQL命令拦截器/// </summary>public class SqlCommandInterceptor : DbCommandInterceptor{/// <summary>/// 读库,从库集群,写库不用设置走默认的EF框架/// </summary>string readConn = System.Configuration.ConfigurationManager.AppSettings["readDb"] ?? string.Empty;private string GetReadConn(){var readArr = readConn.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);var resultConn = string.Empty;if (readArr != null && readArr.Any()){resultConn = readArr[Convert.ToInt32(Math.Floor((double)new Random().Next(0, readArr.Length)))];}return resultConn;}//linq to entity生成的update,deletepublic override void NonQueryExecuting(DbCommand command, DbCommandInterceptionContext<int> interceptionContext){base.NonQueryExecuting(command, interceptionContext);//update,delete等写操作直接走主库
        }/// <summary>/// 执行sql语句,并返回第一行第一列,没有找到返回null,如果数据库中值为null,则返回 DBNull.Value/// </summary>/// <param name="command"></param>/// <param name="interceptionContext"></param>public override void ScalarExecuting(DbCommand command,DbCommandInterceptionContext<object> interceptionContext){if (!string.IsNullOrWhiteSpace(GetReadConn()))//如果配置了读写分离,就去实现
            {if (!command.CommandText.StartsWith("insert", StringComparison.InvariantCultureIgnoreCase)){command.Connection.Close();command.Connection.ConnectionString = GetReadConn();command.Connection.Open();}}base.ScalarExecuting(command, interceptionContext);}/// <summary>/// linq to entity生成的select,insert/// 发送到sqlserver之前触发/// warning:在select语句中DbCommand.Transaction为null,而ef会为每个insert添加一个DbCommand.Transaction进行包裹/// </summary>/// <param name="command"></param>/// <param name="interceptionContext"></param>public override void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext){if (!string.IsNullOrWhiteSpace(GetReadConn()))//如果配置了读写分离,就去实现
            {if (!command.CommandText.StartsWith("insert", StringComparison.InvariantCultureIgnoreCase)){command.Connection.Close();command.Connection.ConnectionString = GetReadConn();command.Connection.Open();}}base.ReaderExecuted(command, interceptionContext);}/// <summary>/// 发送到sqlserver之后触发/// </summary>/// <param name="command"></param>/// <param name="interceptionContext"></param>public override void ReaderExecuted(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext){base.ReaderExecuted(command, interceptionContext);}}

运行程序可以设置一些测试代码

 View Code

最后的结果就是我们想要的,这里说明一点,仓储大步的读写分离没有数据库压力这块的考虑,只是随机去访问某个读库。

本文转自博客园张占岭(仓储大叔)的博客,原文链接:EF架构~通过EF6的DbCommand拦截器来实现数据库读写分离~续~添加事务机制,如需转载请自行联系原博主。

http://www.lbrq.cn/news/1105147.html

相关文章:

  • 网站制作开发/湖南正规seo优化报价
  • 网站建设三网合一/厦门百度seo点击软件
  • 网站建设优势/电子商务网站建设教程
  • 网站外链建设工作计划/seo长尾快速排名
  • 南阳做做网站/百度网站官网网址
  • 百度糯米网站怎么做/关键词优化包年推广
  • 南昌网站建设q479185700惠/sem代运营费用
  • 设计师助理一般都干嘛/seo营销工具
  • 建一个网站需要什么资料/新的网络推广方式
  • 有没有一起做网站的/一键优化清理加速
  • 网站改版方案ppt/国外搜索引擎网站
  • 网站续费自己做/中国seo关键词优化工具
  • 霞山网站建设公司/好的竞价账户托管外包
  • wordpress分享文章插件/东莞网络优化哪家公司好
  • 做网站排名的公司有哪些/关键词推广方式
  • 什么网站可以自己做字/百度一下你就知道了 官网
  • 用java做直播网站/腾讯企点官网
  • 做脚本从网站引流/如何推广一个平台
  • 虚拟主机网站后台/深圳市龙华区
  • 福州网站建设教程视频/网络广告营销的案例
  • 华为公司网站建设相关内容/全球访问量top100网站
  • 旅游手机网站模板/哪些网站可以发广告
  • 做网站用什么软件知乎/班级优化大师的功能有哪些
  • 建站网址不安全/seo关键词教程
  • dw做网站/广州知名网络推广公司
  • 高端的环保行业网站开发/seo站点
  • 制作重庆城市的网页/seo基本步骤
  • 做本地网站能赚钱么/沪深300指数
  • 养猪网站建设规划书/软件推广平台
  • 玉环 企业网站建设/企业网络营销
  • 在NLP深层语义分析中,深度学习和机器学习的区别与联系
  • NX二次开发常用函数坐标转化UF_MTX4_csys_to_csys和UF_MTX4_vec3_multipl
  • 子线程不能直接 new Handler(),而主线程可以
  • GaussDB 数据库架构师修炼(六) 集群工具管理-1
  • AI编程工具对比:Cursor、GitHub Copilot与Claude Code
  • 【DataWhale】快乐学习大模型 | 202507,Task03笔记