⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nhnativetransaction.cs

📁 该文件是多层体系结构的数据访问层
💻 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 + -