📄 nhnativetransaction.cs
字号:
#region Copyright & License
//
// $Copyright:$
//
#endregion
#region Document Information
// $Author: Bai.shijun $
// $Rev: $
// $Date: 05-10-08 16:13 $
#endregion
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
namespace Eai.Data.Transaction
{
/// <summary>
/// 使用NHibernate的事务管理器
/// </summary>
internal class NhNativeTransaction : MixTransactionBase, IDisposable
{
NativeTransactionSet transactions = new NativeTransactionSet();
public NhNativeTransaction()
{
}
#region IMixTransation Members
public override void Begin()
{
started = true;
}
public override void Rollback()
{
if (!TransactionStarted) throw new InvalidOperationException("mix transaction must be started."); ;
transactions.Rollback();
DataAccessors.Close();
started = false;
}
public override void Commit()
{
if (!TransactionStarted) throw new InvalidOperationException("mix transaction must be started."); ;
DataAccessors.Flush();
transactions.Commit();
DataAccessors.Close();
started = false;
}
public override bool SupportParallelTransactin
{
get { return false; }
}
public override void AttachDataAccessor(string name, IDataAccessor dataAccessor)
{
DataAccessors.Add(name, dataAccessor);
transactions.Attach(dataAccessor);
}
#endregion
#region IDisposable Members
public void Dispose()
{
if (TransactionStarted) Rollback();
transactions = null;
}
#endregion
private bool started;
private bool TransactionStarted
{
get { return started; }
}
private class NativeTransactionSet
{
private IList<NHibernate.ITransaction> transactions = new List<NHibernate.ITransaction>();
public void Attach(IDataAccessor dataAccessor)
{
NHibernateDataAccessor nhDataAccessor = (NHibernateDataAccessor)dataAccessor;
NHibernate.ITransaction trans = nhDataAccessor.Session.BeginTransaction();
transactions.Add(trans);
}
public void Rollback()
{
int n = transactions.Count;
for (int i = 0; i < n; i++)
{
transactions[i].Rollback();
}
}
public void Commit()
{
int n = transactions.Count;
for (int i = 0; i < n; i++)
{
transactions[i].Commit();
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -