/// <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; }