protected virtual void RegisterDataObject(HelpDesk_BaseData dataObject)
        {
            if (_txConnectionProvider == null)
            {
                _txConnectionProvider = new HelpDesk_TxConnectionProvider();
            }

            if (dataObject != null)
            {
                dataObject.ConnectionProvider = _txConnectionProvider;
            }
        }
        protected virtual void RegisterBusinessObject(HelpDesk_BaseBusiness busObject)
        {
            if (_txConnectionProvider == null)
            {
                _txConnectionProvider = new HelpDesk_TxConnectionProvider();
            }
            busObject.ConnectionProvider = _txConnectionProvider;

            if (!_listBusObjects.Contains(busObject))
            {
                _listBusObjects.Add(busObject);
            }
        }
        public virtual void CommitTransaction()
        {
            if (_nestLevel > 0)
            {
                _nestLevel--;
            }

            if (_nestLevel == 0)
            {
                _txConnectionProvider.CommitTransaction();
                _txConnectionProvider.CloseConnection(false);
                _txConnectionProvider = null;
            }
        }
 protected virtual void Dispose(bool isDisposing)
 {
     if (!_isDisposed)
     {
         if (isDisposing)
         {
             if (_txConnectionProvider != null)
             {
                 ((IDisposable)_txConnectionProvider).Dispose();
                 _txConnectionProvider = null;
             }
         }
     }
     _isDisposed = true;
 }
        public virtual void BeginTransaction(string trans)
        {
            if (_nestLevel == 0)
            {
                if (_txConnectionProvider == null)
                {
                    _txConnectionProvider = new HelpDesk_TxConnectionProvider();
                }

                _txConnectionProvider.OpenConnection();
                _txConnectionProvider.BeginTransaction(trans);

                if (_listBusObjects != null)
                {
                    foreach (HelpDesk_BaseBusiness busObj in _listBusObjects)
                    {
                        busObj.MarkSubTransaction();
                    }
                }
            }
            _nestLevel++;
        }
        public virtual void RollbackTransaction(string trans)
        {
            if (_nestLevel > 0)
            {
                _nestLevel--;
            }

            if (_nestLevel == 0)
            {
                try
                {
                    _txConnectionProvider.RollbackTransaction(trans);
                    _txConnectionProvider.CloseConnection(false);
                    _txConnectionProvider = null;
                }
                catch (Exception ex)
                {                       //if transaction completed exception, swallow it
                    if (ex.Message != "This SqlTransaction has completed; it is no longer usable.")
                    {
                        throw;
                    }
                }
            }
        }
 private void Init()
 {
     _nestLevel            = 0;
     _txConnectionProvider = null;
 }