/// <summary>
        /// Releases the current transaction in the <see cref="LinqToSqlUnitOfWork"/> instance.
        /// </summary>
        private void ReleaseCurrentTransaction()
        {
            if (_transaction != null)
            {
                _transaction.TransactonComitted -= TransactionCommitted;
                _transaction.TransactionRolledback -= TransactionRolledback;
                _transaction.Dispose();
            }
            _transaction = null;

            //Closing the connection once the transaction has completed.
            if (_linqContext.Connection.State == ConnectionState.Open)
                _linqContext.Connection.Close();
        }
        /// <summary>
        /// Instructs the <see cref="IUnitOfWork"/> instance to begin a new transaction
        /// with the specified isolation level.
        /// </summary>
        /// <param name="isolationLevel">One of the values of <see cref="IsolationLevel"/>
        /// that specifies the isolation level of the transaction.</param>
        /// <returns></returns>
        public ITransaction BeginTransaction(IsolationLevel isolationLevel)
        {
            Throw.Against<InvalidOperationException>(_transaction != null,
                                                     "Cannot begin a new transaction while an existing transaction is still running. " +
                                                     "Please commit or rollback the existing transaction before starting a new one.");
            if (_linqContext.Connection.State != ConnectionState.Open)
                _linqContext.Connection.Open();

            IDbTransaction transaction = _linqContext.Connection.BeginTransaction(isolationLevel);
            _linqContext.Transaction = transaction;
            _transaction = new LinqToSqlTransaction(transaction);
            _transaction.TransactonComitted += TransactionCommitted;
            _transaction.TransactionRolledback += TransactionRolledback;
            return _transaction;
        }
        /// <summary>
        /// Disposes off manages resources used by the LinqToSqlUnitOfWork instance.
        /// </summary>
        /// <param name="disposing"></param>
        private void Dispose(bool disposing)
        {
            if (!disposing) return;
            if (_disposed) return;

            if (_transaction != null)
            {
                _transaction.Dispose();
                _transaction = null;
            }
            if (_linqContext != null)
            {
                _linqContext.Dispose();
                _linqContext = null;
            }
            _disposed = true;
        }