С NHibernate и Транзакцией я откатываю при отказе фиксации, или он автоматический откат на единственной фиксации?

Я создал следующее, Располагают метод для моей Единицы работы, которая по существу переносит активную сессию NH и транзакцию (набор транзакции, столь же переменный после открытия относительно не быть замененным, если сессия NH получает новую транзакцию после ошибки),

 public void Dispose()
    {
        Func<ITransaction,bool>  transactionStateOkayFunc = 
            trans => trans != null && trans.IsActive && !trans.WasRolledBack;

        try {
            if(transactionStateOkayFunc(this.transaction))
            {
                    if (HasErrored)
                    {
                        transaction.Rollback();
                    }
                    else
                    {
                        try
                        {
                            transaction.Commit();
                        } catch (Exception)
                        {
                            if(transactionStateOkayFunc(transaction)) transaction.Rollback();
                            throw;
                        }
                    }
                }
        } finally
        {
            if(transaction != null) transaction.Dispose();
            if(session.IsOpen) session.Close();
        }

Я не могу сдержать чувство, что код немного чрезмерно увеличен в размере, будете, транзакция автоматически откатывать является дискретной Фиксацией сбои в случае невложенных транзакций?

Будет Фиксировать или Откат автоматически Dipose транзакция? Если не будет Сессия. Близко () автоматически располагают связанную транзакцию?

6
задан 8 September 2009 в 08:26
поделиться