Использование TransactionScope () с проблемой BeginTransaction () NHibernate - PullRequest
1 голос
/ 08 июня 2011

Я использую NHibernate 3.1.0 с MySql Connector 6.3.5.Как правило, мои методы хранилища заключены в транзакцию NHibernate.Однако код службы или приложения, вызывающий методы репозитория, может также потребовать области транзакции - поэтому смешивание транзакций NHibernate с .NET TransactionScope.Симулируемый тест выглядит следующим образом:

[Test]
public void CanPerformNestedSave()
{
    using (var tx = new TransactionScope())
    {
        var user = new AdminUser { Email = "user@test.com", Name = "Test User 1", Password = "123" };

        using (ISession session = OpenSession())
        {
            using (var tx = session.BeginTransaction())
            {
                entity.ModifiedAt = DateTime.Now;
                session.SaveOrUpdate(entity);
                tx.Commit();

                return entity;
            }
        }

        tx.Complete();
    }
}

Тест завершается неудачно со следующей ошибкой:

NHibernate.TransactionException: Начало не удалось с исключением SQL ----> System.InvalidOperationExceptionВложенные транзакции не поддерживаются.

Я изучил Интернет, чтобы найти решение для этого сценария, и, надеюсь, сообщество StackOverflow может помочь.

1 Ответ

1 голос
/ 08 июня 2011

Я писал об этом здесь .

В записи блога NServiceBus создает внешний TransactionScope для обработчиков, а сеанс Nhibernate и транзакции используются внутри обработчика.

...