在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 = ;
t1.name = "Test1";
t1.Save(); Test2 t2 = new Test2();
t2.id = ;
//故意使长度超过数据库字段的长度,让操作失败
t2.tname = "Test2kkkkkkkkkkkkkkkkkkkkkkkkkkk";
t2.Save();
}
}
}

最后执行事务进行测试

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

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

EAS_AOP分布式事务的更多相关文章

  1. 群集中的MS DTC分布式事务协调器

    MS DTC在大多数SQL 服务器下都需要安装,若只是安装数据库引擎或Analysis 服务可不安装DTC.如果后需要使用分布式事务,则可在SQL Server群集安装完成后再安装DTC. 一.群集M ...

  2. 事务使用中如何避免误用分布式事务(System.Transactions.TransactionScope)

    1:本地事务DbTransaction和分布式事务TransactionScope的区别: 1.1:System.Data.Common.DbTransaction: 本地事务:这个没什么好说了,就是 ...

  3. 没有活动事务 链接服务器的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务

    在windows2003下执行分布式事务的时候出现如下情况. 一. 问题现象在执行分布式事务时,在sql server 2005下收到如下错误: 链接服务器"xxxxxxx"的 O ...

  4. 已禁用对分布式事务管理器(MSDTC)的网络访问的解决方法之一

    C# ASP.NET项目提示上述错误,在代码中使用分布式事务提示添加或修改到数据库的时候.添加数据到数据库时,不会设置实体类的主键字段.

  5. 【转】PostgreSQL分布式事务配置

    XA是open group提出的分布式事务处理规范,JTA支持XA规范,JTA只规定了接口,有些应用容器提供实现,也有一些三方的开源实现可用,比如Atomikos. 如果PostgreSQL参与分布式 ...

  6. 分布式事务(一)两阶段提交及JTA

    原创文章,同步发自作者个人博客 http://www.jasongj.com/big_data/two_phase_commit/ 分布式事务 分布式事务简介 分布式事务是指会涉及到操作多个数据库(或 ...

  7. 关于分布式事务的一个误解:使用了TransactionScope就一定会开启分布式事务吗?

    背景: 事务是数据库管理系统的一个基本概念,事务具有四个基本特点,即ACID:原子性(Atomicity).一致性(Consistency).隔离性(Isolation)和持久性(Durability ...

  8. 分布式事务操作之Spring+JTA

    什么是分布式事务?在网上找了一段比较容易理解的"定义". 分布式事务是指事务的参与者.支持事务的服务器.资源管理器以及事务管理器分别位于分布系统的不同节点之上,在两个或多个网络计算 ...

  9. java分布式事务

    1.现有方案 a.atomikos b.jotm 说明:spring3.0已将jotm的支持踢掉 2.使用atomikos时的pom.xml内容 <!-- 分布式事务支持-atomikos-be ...

随机推荐

  1. Bootstrap-Other:Less 教程

    ylbtech-Bootstrap-Other:Less 教程 1.返回顶部 1. 2. 2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 1. http://www.runoob. ...

  2. 031:Cetus sharding

    目录 一.主机环境 二.搭建环境 1.准备环境 三.Cetus安装 1.下载包和安装依赖包 2.Cetus安装 1.安装说明 2.安装实施 四.Cetus配置 1.创建和修改配置文件 2.启动cetu ...

  3. 关于jQuery的$.proxy()应用.

    今天在看<<锋利的jQuery>>时看到了proxy()的使用,感觉很模糊,就到处找资料. jQuery的源码也没看明白. 不过总算明白了proxy的用法了; <inpu ...

  4. socket_简单报头

    client--------------------- #!/usr/bin/python3# -*- coding: utf-8 -*-# @Time    : 2018/6/6 14:53# @F ...

  5. java selenium webdriver第四讲 应用小结

    部分api 1.访问网站 driver.get("http://www.baidu.com"); 或者 driver.navigate().to("http://www. ...

  6. OpenMP 循环调度 + 计时

    ▶ 使用子句 schedule() 来调度循环,对于循环中每次迭代时间不相等的情况较为有效 ● 代码 #include <stdio.h> #include <stdlib.h> ...

  7. opencv:级联分类器训练(cascade classifier training)(两个分类器的区别)

    # 介绍 级联分类器包括两个工作阶段:训练(traning),检测(detection).检测阶段在文档<objdetect module of general OpenCV documenta ...

  8. jeesite快速开发平台(七)----代码生成原理

    转自:https://blog.csdn.net/u011781521/article/details/79322942

  9. JAVA 获取文件的MD5值大小以及常见的工具类

    /** * 获取文件的MD5值大小 * * @param file * 文件对象 * @return */ public static String getMD5(File file) { FileI ...

  10. ubuntu 安装google输入法

    第五步:通常情况下,IBus图标(一个小键盘)会出现在桌面右上角的任务栏中.有时候这个图标会自行消失,可使用以下命令,找回消失的IBus图标: ibus-daemon -drx   不建议用googl ...