Проблемът с използването само на обхвата на транзакцията е описан тук:NHibernate FlushMode Auto не се изтрива преди намиране
Изглежда, че nhibernate (v3.1 с диалект на oracle и 11g db w/opd.net v2.112.1.2) изисква свои собствени транзакции, за да избегне проблема с промиването, но не успях да накарам обхвата на транзакцията да работи с nhibernate транзакции.
Изглежда не мога да го накарам да работи :(това може да е дефект в nhibernate или odp.net, не съм сигурен...
намери същия проблем тук:NHibernate 3.0:TransactionScope и Auto - Зачервяване
ПОПРАВЕНО:намерено решение! като поставите "enlist=dynamic;" в моя низ за свързване на oracle, проблемът беше разрешен. Успях да използвам както транзакцията nhibernate (за отстраняване на проблема с промиването), така и обхвата на транзакцията по следния начин:
ISessionFactory sessionFactory = CreateSessionFactory();
using (TransactionScope ts = new TransactionScope())
{
using (ISession session = sessionFactory.OpenSession())
using (ITransaction tx = session.BeginTransaction())
{
//do stuff here
tx.Commit();
}
ts.Complete();
}
Проверих регистрационните си файлове и открих това:2011-06-27 14:03:59,852 [10] DEBUG NHibernate.Impl.AbstractSessionImpl - включен в DTC транзакция:Serializable
преди да бъде изпълнен SQL във връзката. Ще тествам единица, за да потвърдя правилното изпълнение. Все пак не съм много сигурен какво ми казва сериализуемото