Problemet med kun at bruge transaktionsomfanget er beskrevet her:NHibernate FlushMode Auto Skyller ikke før Find
Det ser ud til, at nhibernate (v3.1 med orakeldialekt og 11g db w/opd.net v2.112.1.2) kræver dets egne transaktioner for at undgå skylningsproblemet, men jeg har ikke været i stand til at få transaktionsomfanget til at fungere med nhibernate transaktioner.
Jeg kan tilsyneladende ikke få det til at virke :(dette kan være en defekt i nhibernate eller odp.net, ved ikke...
fandt samme problem her:NHibernate 3.0:TransactionScope og Auto -Skylning
FIKSET:fundet en løsning! ved at sætte "enlist=dynamic;" ind i min oracle-forbindelsesstreng, blev problemet løst. Jeg har været i stand til at bruge både nhibernate-transaktionen (for at løse flush-problemet) og transaktionsomfanget som sådan:
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();
}
Jeg tjekkede mine logfiler og fandt denne:2011-06-27 14:03:59,852 [10] DEBUG NHibernate.Impl.AbstractSessionImpl - indrulleret i DTC-transaktion:Serialiserbar
før nogen SQL blev udført på forbindelsen. Jeg vil enhedsteste for at bekræfte korrekt udførelse. Jeg er dog ikke så sikker på, hvad serializable fortæller mig dog