您的位置:威尼斯官方网站 > 威尼斯正规官网 > 一个错误的知情就是Complete(卡塔 尔(英语:S

一个错误的知情就是Complete(卡塔 尔(英语:S

发布时间:2019-11-27 17:26编辑:威尼斯正规官网浏览(169)

    TransactionScope只要一个操作失利,它会活动回滚,Complete表示事情实现

     

    现实上,叁个荒谬的领会正是Complete(卡塔 尔(英语:State of Qatar)方法是付诸业务的,那是大错特错的,事实上,它的效率的表示本作业实现,它常常位于try{}的结尾处,不用判别前台操作是不是成功,假使不成事,它会协和回滚。

     

     

    在.net 1.1的有的时候,还尚无TransactionScope类,因而不罕有关业务的拍卖,都提交了SqlTransaction和SqlConnection,每一个Transaction是依赖各类Connection的。这种设计对于超越多少个程序集可能七个艺术的职业行为来讲,不是充足好,必要把作业和数据库连接作为参数字传送入。

    在.net 2.0后,TransactionScope类的面世,大大的简化了工作的宏图。示例代码如下:

    1.  

      static void Main(string[] args)

    2.  

      {

    3.  

      using (TransactionScope ts = new TransactionScope())

    4.  

      {

    5.  

      userBLL u = new userBLL();

    6.  

      TeacherBLL t = new TeacherBLL();

    7.  

      u.ADD();

    8.  

      t.ADD();

    9.  

      ts.Complete();

    10.  

      }

    11.  

      }

    只要求把要求工作包裹的逻辑块写在using (TransactionScope ts = new TransactionScope())中就能够了。从这种写法可以看出,TransactionScope实现了IDispose接口。除非展现调用ts.Complete()方法。不然,系统不会自行提交那个专业。假诺在代码运维退出那个block后,还没调用Complete(),那么事务自动回滚了。在此个事情块中,u.ADD()方法和t.ADD()方法内部都不曾使用任何事务类。

    TransactionScope是依靠当前线程的,在当下线程中,调用Transaction.Current方法可以看出近些日子事务的音信。具体有关TransactionScope的接受格局,已经它的成员方法和质量,能够查看 MSDN.aspx) 。

    TransactionScope类是可以嵌套使用,假设要嵌套使用,须求在嵌套事务块中钦定TransactionScopeOption参数。暗中认可的这些参数为Required。

    该参数的切实可行意思能够参见

    例如上边代码:

    1.  

      static void Main(string[] args)

    2.  

      {

    3.  

      using (TransactionScope ts = new TransactionScope())

    4.  

      {

    5.  

      Console.WriteLine(Transaction.Current.TransactionInformation.LocalIdentifier);

    6.  

      userBLL u = new userBLL();

    7.  

      TeacherBLL t = new TeacherBLL();

    8.  

      u.ADD();

    9.  

      using (TransactionScope ts2 = new TransactionScope(TransactionScopeOption.Required))

    10.  

      {

    11.  

      Console.WriteLine(Transaction.Current.TransactionInformation.LocalIdentifier);

    12.  

      t.ADD();

    13.  

      ts2.Complete();

    14.  

      }

    15.  

      ts.Complete();

    16.  

      }

    17.  

      }

    当嵌套类的TransactionScope的TransactionScopeOption为Required的时候,则足以见见如下结果,他们的事情的ID都是同贰个。并且,唯有当2个TransactionScope都complete的时候本事算真的成功。

    威尼斯官方网站 1

    后生可畏经把TransactionScopeOption设为RequiresNew,则嵌套的事务块和外围的事务块各自独立,互不影响。

    1.  

      static void Main(string[] args)

    2.  

      {

    3.  

      using (TransactionScope ts = new TransactionScope())

    4.  

      {

    5.  

      Console.WriteLine(Transaction.Current.TransactionInformation.LocalIdentifier);

    6.  

      userBLL u = new userBLL();

    7.  

      TeacherBLL t = new TeacherBLL();

    8.  

      u.ADD();

    9.  

      using (TransactionScope ts2 = new TransactionScope(TransactionScopeOption.RequiresNew))

    10.  

      {

    11.  

      Console.WriteLine(Transaction.Current.TransactionInformation.LocalIdentifier);

    12.  

      t.ADD();

    13.  

      威尼斯官方网站,ts2.Complete();

    14.  

      }

    15.  

      ts.Complete();

    16.  

      }

    17.  

      }

    威尼斯官方网站 2

    能够看见,他们的业务id是不相似的。

     

     

    TransactionScopeOption的属性值:
    

     

    威尼斯官方网站 3

    威尼斯官方网站 4

    威尼斯官方网站 5

    对于四个不等服务器之间的数据库操作,TransactionScope重视DTC(Distributed Transaction Coordinator卡塔 尔(英语:State of Qatar)服务到位专门的学问黄金时代致性。

    可是对于单风华正茂服务器数据,TransactionScope的机制则相比复杂。主要用的的是线程静态脾气。线程静态天性ThreadStaticAttribute让CLPAJERO知道,它标记的静态字段的存取是依赖当前线程,而独自于此外线程的。既然存款和储蓄在线程静态字段中的数据只对存款和储蓄该数据的同一线程中所运营的代码可以见到,那么,可选拔此类字段将其他数据从三个艺术传递到该第一个章程所调用的其余措施,并且完全不用忧郁其余线程会损坏它的做事。TransactionScope 会将眼下的 Transaction 存款和储蓄到线程静态字段中。当稍后实例化 SqlCommand 时(在那 TransactionScope 从线程局地存款和储蓄中除去以前卡塔 尔(阿拉伯语:قطر‎,该 SqlCommand 会检查线程静态字段以搜寻现存 Transaction,假使存在则列入该 Transaction 中。通过这种措施,TransactionScope 和 SqlCommand 能够同盟工作,进而开辟人士不一定会将 Transaction 展现传递给 SqlCommand 对象。实际上,TransactionScope 和 SqlCommand 所使用的体制非常复杂。

    本文由威尼斯官方网站发布于威尼斯正规官网,转载请注明出处:一个错误的知情就是Complete(卡塔 尔(英语:S

    关键词:

上一篇:打开之后看了一下

下一篇:没有了