Problemet med att endast använda transaktionsomfånget beskrivs här:NHibernate FlushMode Auto Spolar inte innan Sök
Det verkar som att nhibernate (v3.1 med orakeldialekt och 11g db w/opd.net v2.112.1.2) kräver sina egna transaktioner för att undvika spolningsproblemet men jag har inte lyckats få transaktionsomfånget att fungera med nhibernate transaktioner.
Jag verkar inte få det att fungera :(detta kan vara ett fel i nhibernate eller odp.net, inte säker...
hittade samma problem här:NHibernate 3.0:TransactionScope och Auto -Spolning
FIXAT:hittade en lösning! genom att sätta "enlist=dynamic;" i min oracle-anslutningssträng, var problemet löst. Jag har kunnat använda både nhibernate-transaktionen (för att åtgärda flush-problemet) och transaktionsomfånget så här:
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();
}
Jag kontrollerade mina loggfiler och hittade detta:2011-06-27 14:03:59,852 [10] DEBUG NHibernate.Impl.AbstractSessionImpl - inkluderad i DTC-transaktion:Serialiserbar
innan någon SQL kördes på anslutningen. Jag kommer att enhetstesta för att bekräfta korrekt utförande. Jag är inte säker på vad serialiserbart säger mig dock