Repository.SaveOrUpdate (), достоверность отката выполняется при исключении? - PullRequest
1 голос
/ 09 декабря 2011

Чтобы сохранить список транзакций (виртуальных) банковских счетов, я хочу, чтобы бизнес-объект отражал состояние, сохраненное в базе данных, также в случае исключения.

Можно ли предположить, что исключение здесь также означает, что транзакция откатывается? Или я могу явно откатиться в улове чтобы быть уверенным? Если так, что если эта строка выдает исключение?

В хранилище :

public void SaveOrUpdate(IList<T> entityList)
{
    using (ISession session = FluentNHibernateManager.OpenSession())
    {
        using (ITransaction transaction = session.BeginTransaction())
        {
            try 
            {
               foreach (T entity in entityList)
                  session.SaveOrUpdate(entity);
               transaction.Commit();
            }
            catch (Exception e)
            {
               MyTrace.Exception(e.ToString());
               // add this line?  transaction.Rollback();
               throw;
            }
        }
    }
}

В каком-то классе:

cashTransactions.Add(t);
try {
    GenericRepository<CashTransaction> repo = new GenericRepository<CashTransaction>();
    repo.SaveOrUpdate(cashTransactions);
} catch (Exception ex) {
    cashTransactions.Remove(t);
}

Ответы [ 3 ]

0 голосов
/ 09 декабря 2011

Вы не можете предполагать, что транзакция была отменена, но вам не нужно предполагать: ITransaction имеет свойство bool WasCommitted.

Вы можете проверить это, чтобы определить, была ли сделка совершена, и явно вызвать Rollback(), где это оправдано.

0 голосов
/ 09 декабря 2011

Для удаления незафиксированной транзакции всегда выполняется ее откат.Это верно во всех реализациях транзакций ado.net, и, конечно, во время выполнения NHibernate будет использовать выбранного вами поставщика ado.net.

0 голосов
/ 09 декабря 2011

Вы должны включить вызов rollback () для правильного отката транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...