Das Problem, nur den Transaktionsbereich zu verwenden, wird hier beschrieben:NHibernate FlushMode wird vor der Suche nicht automatisch geleert
Es scheint, dass nhibernate (v3.1 mit Oracle-Dialekt und 11g db w/opd.net v2.112.1.2) eigene Transaktionen erfordert, um das Spülproblem zu vermeiden, aber ich konnte den Transaktionsbereich nicht dazu bringen, mit nhibernate zu arbeiten Transaktionen.
Ich kann es anscheinend nicht zum Laufen bringen :(Dies könnte ein Fehler in nhibernate oder odp.net sein, nicht sicher ...
habe das gleiche Problem hier gefunden:NHibernate 3.0:TransactionScope und Auto -Spülung
BEHOBEN:Lösung gefunden! indem Sie "enlist=dynamic;" setzen in meine Orakel-Verbindungszeichenfolge wurde das Problem behoben. Ich konnte sowohl die nhibernate-Transaktion (um das Flush-Problem zu beheben) als auch den Transaktionsbereich wie folgt verwenden:
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();
}
Ich habe meine Protokolldateien überprüft und Folgendes gefunden:2011-06-27 14:03:59,852 [10] DEBUG NHibernate.Impl.AbstractSessionImpl - in DTC-Transaktion eingetragen:Serializable
bevor irgendein SQL auf der Verbindung ausgeführt wurde. Ich werde einen Komponententest durchführen, um die ordnungsgemäße Ausführung zu bestätigen. Ich bin mir aber nicht sicher, was mir serialisierbar sagt