Я использую в проектах 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 — ную.
Но как правильно выйти из этого положения?
спасибо за советы!
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.