相关文章

将不确定变为确定~transactionscope何时提升为分布式事务

将不确定变为确定~transactionscope何时提升为分布式事务~续

将不确定变为确定~transactionscope何时提升为分布式事务~再续(避免引起不必要的MSDTC)


对于frameworks的TransactionScope大家应该都很熟悉了,它是一个分布式事务的语句块,被包含起来的语句可以一起被提交,当出现异常后,统一进行回滚,这一切都是托管的。

当WEB服务器没有开启MSDTC服务时,会出现这个提示:

对于servers.msc中的MSDTC服务,它经常性的被挂掉

注意一下:如果你的msdtc服务挂了,当下一次WWW程序需要用到它时,它会自由重启。

而对于你的事务块,如果这个MSDTC服务被挂了后,如果你的事务块中包含“跨库”操作,它将会被自动提升到MSDTC分布式事务,

这时你整个代码块将会中断,并抛出你的异常!

 1     public abstract class DAL<T> : IDAL<T> where T : class
 2     {
 3
 4         public DAL(DbContext db)
 5         {
 6             DB = db;
 7         }
 8
 9
10         #region Properies
11         /// <summary>
12         /// 静态上下文
13         /// </summary>
14         //  protected readonly static DbContext DB = new Entity.testEntities();
15
16         /// <summary>
17         /// 实例上下文
18         /// </summary>
19         protected DbContext DB;
20
21         #endregion

 1       using (TransactionScope trans = new TransactionScope())
 2             {
 3                 try
 4                 {
 5                     base.Insert(entity);
 6                     entity.User_Profile.ID = entity.ID;
 7                     user_ProfileDAL.Insert(entity.User_Profile);
 8                     loginLogsDAL.Insert(new Entity.TestMSDTC.LoginLogs //跨库操作
 9                     {
10                         ID = entity.ID,
11                         LoginName = entity.Name,
12                     });
13                     trans.Complete();
14                 }
15                 catch (Exception)
16                 {
17
18                     throw;
19                 }
20                 finally
21                 {
22                     trans.Dispose();
23                 }
24             }

这时,你的程序由于服务器MSDTC的问题,整个流程被“走不通”,其时这是正常的,事务的作用就是为了保持“数据的完整性”,如果你把语句块写在同一事务中,那说明他们应该是同进同退的,这是一个理论的问题。

而我在之前看过老赵写过一个博文提到这个类似问题,看数据上下文的共享性会影响到事务被提升到MSTDC,我的测试告诉我,没有实现这个结果,这里希望老赵给出一个答案吧,呵呵!在这里先谢谢赵老大了!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:将不确定变为确定~transactionscope何时提升为分布式事务?,如需转载请自行联系原博主。

将不确定变为确定~transactionscope何时提升为分布式事务?相关推荐

  1. 将不确定变为确定~transactionscope何时提升为分布式事务?(sql2005数据库解决提升到MSDTC的办法)...

    回到目录 对于transactionscope不了解的同学,可以看我的相关文章 第二十六回   将不确定变为确定~transactionscope何时提升为分布式事务? 第二十七回   将不确定变为确 ...

  2. TransactionScope和分布式事务的注意点

    分布式事务听起来很不错,其实不然.它只是尽可能的降低数据不一致的可能性,并不能完全避免.从我的应用中来看,总数约5千万的操作,错了十几个.当然,这个错误率完全可以忍受了.不能忍受的是当你的DB在clu ...

  3. C#分布式事务(TransactionScope )

    TransactionScope是.Net Framework 2.0后,新增了一个名称空间.它的用途是为数据库访问提供了一个"轻量级"[区别于:SqlTransaction]的事 ...

  4. Java提升篇-事务隔离级别和传播机制

    转载自 Java提升篇-事务隔离级别和传播机制 问题的提出 为了保证并发操作数据的正确性及一致性,SQL规范于1992年提出了数据库事务隔离级别. 事务隔离级别分类 事务隔离级别由低往高可分为以下几类 ...

  5. 【转】C#中使用TransactionScope类(分布式事务) 和 锁

    如果在C#中使用TransactionScope类(分布式事务),则须注意如下事项: 1.在项目中引用using System.Transactions命名空间(先要在添加net组件的引用); 2.具 ...

  6. C#中使用TransactionScope类(分布式事务)

    如果在C#中使用TransactionScope类(分布式事务),则须注意如下事项: 1.在项目中引用using System.Transactions命名空间(先要在添加net组件的引用); 2.具 ...

  7. TransactionScope 分布式事务

    /// 发送消息          ///</summary>         ///<param name="sendUserId"></param ...

  8. TransactionScope与SQL 中的事务

    TransactionScope是.Net Framework 2.0滞后,新增了一个名称空间.它的用途是为数据库访问提供了一个"轻量级"[区别于:SqlTransaction]的 ...

  9. .net mysql transactionscope_.net中使用transactionScope连接oracle数据库,事务没有提交,但是数据还是被修改了...

    代码如下 try { using (TransactionScope scope=new TransactionScope()) { AddForSqlserver("insert into ...

最新文章

  1. TVM性能评估分析(四)
  2. crf与bitrate对照表
  3. aes加密字符串c++_springboot2.2.X手册:防抓包?快速实现API接口数据加密
  4. 去哪儿app_58款APP遭点名,多家基金、银行产品上榜!
  5. Blender Reference Manual 欢迎使用Blender手册!
  6. Android:Fragment官方文档
  7. Bootdo后台管理系统使用步骤详解
  8. Jetpack—LiveData组件的缺陷以及应对策略 转至元数据结尾
  9. iOS集成OpenCV,并实现图片马赛克
  10. 用python画钢铁侠_Matplotlib绘制漫威英雄战力图,带你飞起来!
  11. 用python进行微信分析(带群发功能)
  12. Windows10系统变慢,用上这19招,电脑性能大幅度提升!
  13. 自己制作的直流电机驱动器
  14. aspectj框架切入点表达式
  15. offer different kinds of LED lights
  16. WPF 仿微信聊天气泡
  17. JAVA-广联达-小朋友站队问题
  18. 【CSS】单行图片与文字垂直居中
  19. 机器学习方法的PPT
  20. 随机生成区间范围的整数(含负数)

热门文章

  1. 【转】使 用免费UMS架设Flash流媒体服务
  2. java查找最小字符集_如何查找Java中的默认字符集/编码?
  3. 临床科研设计的主要内容
  4. 箱线图怎么判断异常值_箱形图(Box-plot)识别异常值,是否有数据依据?还是经验法则?...
  5. adams2015安装教程
  6. C语言 | 编程实现6
  7. 计算机视觉 | 计算机界国际学术会议和期刊目录
  8. 定时采用ajax方式获得数据库,《基于Ajax的在线客服系统的设计与实现》-毕业设计论文(学术).doc...
  9. inotify加rsync备份mysql_centos7 实现inotify-tools + rsync,自动备份mysql数据库
  10. Anaconda 安装与使用