Как быть со вложенной транзакцией? ( NHibernate + SQL )
От: SteeLHeaD  
Дата: 17.06.13 18:04
Оценка:
Я использую в проектах nHibernate, и во многих местах у меня в коде встречаются конструкции типа


      using (ITransaction transaction = session.BeginTransaction())
      {
        try
        {
          ...
          transaction.Commit();
        }
        catch( exception ex )
    {
      transaction.Rollback();
    }
     }



То есть это транзакция на уровне NHibernate — сессии.
Но вот попался мне объект, в конструкторе которого делалось много инициализаций,
связанных с базой данных — но они делались же через ADO.
И показалось мне, что эти инициализации хорошо бы обернуть в SQL — евскую транзакцию.
Сказано — сделано, я добавил в конструктор NHibernate — объекта код вида


SqlTransaction trans = cn.BeginTransaction();
try
{
...
trans.Commit();
}
catch
{
trans.Rollback();
}



и...
все сломалось.
Программа стала вылетать с ошибкой "could not instantiate test object:" и полным стек — трейсом NHibernat'овской ругани.

я понимаю, что где то в процессе вызова конструктора две транзакции стукаютсмя лбами, потому что Nhibernat'овская транзакция все равно опирается на SQL — ную.

Но как правильно выйти из этого положения?
спасибо за советы!
nhibernate sql транзакции
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.