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 = ;
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都没有插入数据
最新文章
- Mysql 存储引擎中InnoDB与Myisam的主要区别
- js构建ui的统一异常处理方案(二)
- DTD的作用
- 在 SQL Server 数据库的 WHERE 语句中使用子查询
- go1.6.2 linux/amd64 的一个bug: gcc: 无法识别的选项&lsquo;-no-pie&rsquo;
- Android knock code analysis
- springmvc里面的中文乱码问题
- Objective-C 学习笔记(Day 2)
- cURL: Learning..
- Oracle教程-查询(二)
- Bootstrap入门(二十七)JS插件4:标签页
- v-for key
- Java学习--数组--判断数组中是否包含某个元素的方法
- centos 批量杀死进程
- Object.defineProperty方法
- MySql笔记二:命令简介
- POJ 1456 - Supermarket - [贪心+小顶堆]
- 大数据学习路线分享-Hbase shell的基本操作完整流程
- mongodb细节
- apk 静默安装
热门文章
- [转][ASP.NET]ASP.NET 预编译网站
- cookies封装
- javascript中原型,构造器,还有E5扩展的默认成员
- 【python 】装饰器 (多个参数的函数,带参数的装饰器)【转】
- 迷你MVVM框架 avalonjs 1.3.4发布
- artZoom 图片可放大旋转
- 关于ueditor与arcgis js api同用会报错的问题
- _MainTex_TexelSize what&#39;s the meaning?
- windows安装mysql-5.7压缩版详细教程
- Linux automake命令