今天我写了一段代码,如下:
            using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope())
            {
                //执行Oracle的一些操作                ts.Complete();
            }
    据MSDN上说,这样可以实现隐式的分布式事务,在这个隐式事务范围内,可以实现多个不同数据库操作的事务性,看似短短的几段代码,却能实现这样的功能,不知道背后的原理是什么?
    请大家不吝赐教!

解决方案 »

  1.   

    分布式事务原理倒不清楚,不过我研究过微软企业库中Data Access Application Block的代码,在打开数据库连接时有类似如下的判断代码if (Transaction.Current != null)
    {
        为连接创建事务
    }你自己也可以测试一下,在using块内,Transaction.Current != null;在using块外,Transaction.Current == null,这种隐式事务,.Net Framework并没有做太多的事情,只是告诉应用程序,当前在事务范围内,至于具体事务,还得要驱动程序根据此判断条件进行相应的事务处理
      

  2.   

    用 TransactionScope 类创建隐式事务,以便自动管理环境事务上下文
    使用TransactionScope类
    在该模型中,事务的基本的ACID属性由该类的基础结构实现、事务的提交和回滚实际上都在基础结构中完成,该类中定义的Complete方法实际上仅仅是通知基础结构当前事务代码已经完成可以开始提交
      

  3.   

    我想了解的是,处理事务的对象可能是未知的,可能是SqlServer,也可能是Oracle,这么一个简单的类,是怎么与这些具体处理事务的提供者协作的呢?!