Problém s použitím pouze rozsahu transakce je nastíněn zde:NHibernate FlushMode Auto se nesplachuje před nalezením
Zdá se, že nhibernate (v3.1 s věšteckým dialektem a 11g db w/opd.net v2.112.1.2) vyžaduje vlastní transakce, aby se předešlo problému s vyplachováním, ale nepodařilo se mi získat rozsah transakce, aby fungoval s nhibernate transakce.
Nedaří se mi to zprovoznit :( to může být závada v nhibernate nebo odp.net, nejsem si jistý...
našel stejný problém zde:NHibernate 3.0:TransactionScope and Auto -Splachování
OPRAVENO:nalezeno řešení! zadáním "enlist=dynamic;" do mého připojovacího řetězce Oracle, problém byl vyřešen. Byl jsem schopen použít jak transakci nhibernate (k vyřešení problému s vyplachováním), tak rozsah transakce takto:
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();
}
Zkontroloval jsem své protokolové soubory a našel toto:2011-06-27 14:03:59,852 [10] DEBUG NHibernate.Impl.AbstractSessionImpl – zařazen do transakce DTC:Serializovatelné
před provedením jakéhokoli SQL na připojení. Budu testovat jednotku, abych potvrdil správné provedení. Nejsem si však příliš jistý, co mi serializovatelný říká