asp.net IBatisNet事务,支持事务嵌套
来源:互联网 发布:风水罗盘指南针软件 编辑:程序博客网 时间:2024/06/06 15:37
/// <summary>
/// IBatis事务,支持事务嵌套
/// </summary>
public class IBatisTransaction
{
static private object _syn = new object();//控制多线程并发
static private Dictionary<Thread, int> _SessionList = new Dictionary<Thread, int>();//保存运行事务的线程,int 表示某一个线程执行多级事务的数量,即:两个方法中都有事务存在
/// <summary>
/// 开始事务
/// </summary>
/// <param name="callObj">调用对象,一般为this</param>
public static void BeginTransaction(object callObj)
{
ISqlMapper daoManager = ServiceConfig.GetInstance().DaoManager;
Thread thread = Thread.CurrentThread;
lock (_syn)
{
if (_SessionList.ContainsKey(thread))//当前线程已经存在事务标识中就不开启第二层事务
{
_SessionList[thread]++;//事务标识++
Log4Util.Info(callObj, "事务标志+1(threadId:" + thread.GetHashCode() + " value:" + _SessionList[thread] + ")" + daoManager.GetHashCode());
}
else
{
//System.Data.IsolationLevel
daoManager.BeginTransaction();线程第一次访问开启事务
_SessionList.Add(thread, 0);//当前线程加入标识集合中
Log4Util.Info(callObj, "开始事务(threadId:" + thread.GetHashCode() + " value:" + _SessionList[thread] + ")" + daoManager.GetHashCode());
}
}
}
/// <summary>
/// 提交事务
/// </summary>
/// <param name="callObj">调用对象,一般为this</param>
public static void CommitTransaction(object callObj)
{
ISqlMapper daoManager = ServiceConfig.GetInstance().DaoManager;
Thread thread = Thread.CurrentThread;
lock (_syn)
{
if (!_SessionList.ContainsKey(thread))
throw new ExceptionBaseEx("从未执行BeginTransaction操作.");
if (_SessionList[thread] == 0)
{
daoManager.CommitTransaction();
_SessionList.Remove(thread);
Log4Util.Info(callObj, "提交事件(threadId:" + thread.GetHashCode() + ")");
}
else
{
_SessionList[thread]--;
Log4Util.Info(callObj, "事务标志-1(threadId:" + thread.GetHashCode() + " value:" + _SessionList[thread] + ")" + daoManager.GetHashCode());
}
}
}
/// <summary>
/// 回滚事务
/// </summary>
/// <param name="callObj">调用对象,一般为this</param>
public static void RollBackTransaction(object callObj)
{
ISqlMapper daoManager = ServiceConfig.GetInstance().DaoManager;
Thread thread = Thread.CurrentThread;
lock (_syn)
{
if (!_SessionList.ContainsKey(thread))
throw new ExceptionBaseEx("从未执行BeginTransaction操作.");
if (_SessionList[thread] == 0)
{
daoManager.RollBackTransaction();
_SessionList.Remove(thread);
Log4Util.Info(callObj, "回滚事件(threadId:" + thread.GetHashCode() + ")");
}
else
{
_SessionList[thread]--;
Log4Util.Info(callObj, "事务标志-1(threadId:" + thread.GetHashCode() + " value:" + _SessionList[thread] + ")" + daoManager.GetHashCode());
}
}
}
}
/// IBatis事务,支持事务嵌套
/// </summary>
public class IBatisTransaction
{
static private object _syn = new object();//控制多线程并发
static private Dictionary<Thread, int> _SessionList = new Dictionary<Thread, int>();//保存运行事务的线程,int 表示某一个线程执行多级事务的数量,即:两个方法中都有事务存在
/// <summary>
/// 开始事务
/// </summary>
/// <param name="callObj">调用对象,一般为this</param>
public static void BeginTransaction(object callObj)
{
ISqlMapper daoManager = ServiceConfig.GetInstance().DaoManager;
Thread thread = Thread.CurrentThread;
lock (_syn)
{
if (_SessionList.ContainsKey(thread))//当前线程已经存在事务标识中就不开启第二层事务
{
_SessionList[thread]++;//事务标识++
Log4Util.Info(callObj, "事务标志+1(threadId:" + thread.GetHashCode() + " value:" + _SessionList[thread] + ")" + daoManager.GetHashCode());
}
else
{
//System.Data.IsolationLevel
daoManager.BeginTransaction();线程第一次访问开启事务
_SessionList.Add(thread, 0);//当前线程加入标识集合中
Log4Util.Info(callObj, "开始事务(threadId:" + thread.GetHashCode() + " value:" + _SessionList[thread] + ")" + daoManager.GetHashCode());
}
}
}
/// <summary>
/// 提交事务
/// </summary>
/// <param name="callObj">调用对象,一般为this</param>
public static void CommitTransaction(object callObj)
{
ISqlMapper daoManager = ServiceConfig.GetInstance().DaoManager;
Thread thread = Thread.CurrentThread;
lock (_syn)
{
if (!_SessionList.ContainsKey(thread))
throw new ExceptionBaseEx("从未执行BeginTransaction操作.");
if (_SessionList[thread] == 0)
{
daoManager.CommitTransaction();
_SessionList.Remove(thread);
Log4Util.Info(callObj, "提交事件(threadId:" + thread.GetHashCode() + ")");
}
else
{
_SessionList[thread]--;
Log4Util.Info(callObj, "事务标志-1(threadId:" + thread.GetHashCode() + " value:" + _SessionList[thread] + ")" + daoManager.GetHashCode());
}
}
}
/// <summary>
/// 回滚事务
/// </summary>
/// <param name="callObj">调用对象,一般为this</param>
public static void RollBackTransaction(object callObj)
{
ISqlMapper daoManager = ServiceConfig.GetInstance().DaoManager;
Thread thread = Thread.CurrentThread;
lock (_syn)
{
if (!_SessionList.ContainsKey(thread))
throw new ExceptionBaseEx("从未执行BeginTransaction操作.");
if (_SessionList[thread] == 0)
{
daoManager.RollBackTransaction();
_SessionList.Remove(thread);
Log4Util.Info(callObj, "回滚事件(threadId:" + thread.GetHashCode() + ")");
}
else
{
_SessionList[thread]--;
Log4Util.Info(callObj, "事务标志-1(threadId:" + thread.GetHashCode() + " value:" + _SessionList[thread] + ")" + daoManager.GetHashCode());
}
}
}
}
阅读全文
0 0
- asp.net IBatisNet事务,支持事务嵌套
- IBatisNet 事务
- ASP.NET事务
- Asp.net 事务用法
- asp.net 事务
- asp.net 事务例子
- asp.net 事务
- asp.net 事务
- asp.net 的事务
- asp.net处理事务
- asp.net事务机制
- Android SQLite 支持嵌套事务吗?
- Android SQLite 支持嵌套事务吗?
- 嵌套事务,自治事务
- 嵌套事务
- 事务嵌套
- 嵌套事务
- 嵌套事务
- xtu 1260 Determinant [2017年“嘉杰信息杯” 中国大学生程序设计竞赛全国邀请赛(湖南) A题]
- 【python】原始字符串
- HDU5831 Rikka with Parenthesis II
- Count the Sheep
- Weex 入门文档
- asp.net IBatisNet事务,支持事务嵌套
- join方式
- 字母’x’在CSS世界中的角色和故事
- 进程间通信,信号量
- MySQL——2(数据库基本操作)
- 区分Java中try和finally语句什么时候执行
- Codeforces Round #424 -(二分&贪心)||dp-D. Office Keys
- Redis系列三
- MFC按钮控件Button按下和弹起事件实现示例