zoukankan      html  css  js  c++  java
  • EAS_AOP分布式事务

    在System.Transactions事务体系中,为事务提供了7种不同的隔离级别。这7中隔离级别分别通过 System.Transactions.IsolationLevel的7个枚举项表示。

    public enum IsolationLevel
      {
          Serializable,
          RepeatableRead,
          ReadCommitted,
          ReadUncommitted,
          Snapshot,
          Chaos,
          Unspecified
      }

     

    7个隔离级别之中,Serializable具有最高隔离级别,代表的是一种完全基于序列化(同步)的数据 存取方式,这也是System.Transactions事务默认采用的隔离级别。按照隔离级别至高向低,7个不同的 隔离级别代表的含义如下:

     

    * Serializable:可以在事务期间读取可变数据,但是不可以修改,也不可以添加任何新数据;

     

    * RepeatableRead:可以在事务期间读取可变数据,但是不可以修改。可以在事务期间添加新数据;

     

    * ReadCommitted:不可以在事务期间读取可变数据,但是可以修改它;

     

    * ReadUncommitted:可以在事务期间读取和修改可变数据;

     

    * Snapshot:可以读取可变数据。在事务修改数据之前,它验证在它最初读取数据之后另一个事务是 否更改过这些数据。如果数据已被更新,则会引发错误。这样使事务可获取先前提交的数据值;

     

    * Chaos:无法覆盖隔离级别更高的事务中的挂起的更改;

     

    * Unspecified:正在使用与指定隔离级别不同的隔离级别,但是无法确定该级别。如果设置了此值 ,则会引发异常。

     

    先定义一个接口,Tran方法准备使用事务

    namespace Drug.BLL
    {
        public interface ITranTest
        {
            void Tran();
        }
    }

    业务层代码

    namespace Drug.BLL
    {
        [ServiceBind(typeof(ITranTest))]
        public class TranTest : ITranTest
        { 
         //给需要通过事务执行的方法打上Transaction标记,并设置事务隔离级别
         [Transaction(System.Transactions.IsolationLevel.Serializable)]
    public void Tran() { Test1 t1 = new Test1(); t1.id = 1; t1.name = "Test1"; t1.Save(); Test2 t2 = new Test2(); t2.id = 1; //故意使长度超过数据库字段的长度,让操作失败 t2.tname = "Test2kkkkkkkkkkkkkkkkkkkkkkkkkkk"; t2.Save(); } } }

    最后执行事务进行测试

                try
                {
                    ITranTest ITrans = ServiceContainer.GetService<ITranTest>();
                    ITrans.Tran();
                    MessageBox.Show("事务执行成功!");
                }
                catch
                {
                    MessageBox.Show("事务执行失败!");
                }

    执行到t2.Save()的时候会提示字符串将被截断 事务操作不能成功,Test1和Test2都没有插入数据

  • 相关阅读:
    如何优雅地结束线程的生命周期
    线程的interrupt()
    线程的join()方法
    守护线程Daemon
    使用多线程模拟一个银行叫号窗口
    多线程介绍
    十八、MySQL 数据排名查询某条数据是总数据的第几条
    spring cloud stream整合
    036线程进程(重要)
    035server端并发聊天
  • 原文地址:https://www.cnblogs.com/docomo/p/3338908.html
Copyright © 2011-2022 走看看