未在NHibernate事务中正确登记IDbCommand

未在NHibernate事务中正确登记IDbCommand,nhibernate,Nhibernate,我有两个从NHibernate会话创建的IDbCommand对象,它们通过NHibernate会话登记到事务中。第一个数据库命令将值插入Oracle全局临时表,第二个命令从表中读取值。对于Oracle GTT,两个命令都需要一个事务,以便在GTT中保留数据 奇怪的是,第二个命令在一台服务器上运行时,正如预期的那样,从GTT读取值,但完全相同的代码在另一台服务器上不起作用。更奇怪的是,非工作服务器上的第一个请求如果在IIS工作进程被回收后立即发生,则可以工作。之后的每个请求都不起作用-具体而言,G

我有两个从NHibernate会话创建的IDbCommand对象,它们通过NHibernate会话登记到事务中。第一个数据库命令将值插入Oracle全局临时表,第二个命令从表中读取值。对于Oracle GTT,两个命令都需要一个事务,以便在GTT中保留数据

奇怪的是,第二个命令在一台服务器上运行时,正如预期的那样,从GTT读取值,但完全相同的代码在另一台服务器上不起作用。更奇怪的是,非工作服务器上的第一个请求如果在IIS工作进程被回收后立即发生,则可以工作。之后的每个请求都不起作用-具体而言,GTT中的值在插入后不会保持不变

ISession session = sessionFactory.GetSession();
ITransaction transaction = session.BeginTransaction();

IDbCommand cmdInsert = session.Connection.CreateCommand();
transaction.Enlist(cmdInsert);
cmdInsert.CommandText = "insert into TEMP_TABLE values (1)";
cmdInsert.ExecuteNonQuery();

IDbCommand cmdRead = session.Connection.CreateCommand();
transaction.Enlist(cmdRead);
cmdRead.CommandText = "select from TEMP_TABLE";

// Nothing is returned here after the second request
cmdRead.ExecuteQuery();

transaction.Commit();

为什么从NHibernate会话创建的事务在向IIS服务器发出第一个请求后不能正确登记IDB命令?

我们最终使用了Oracle Data Provider for.NET ODP.NET驱动程序,并替换了不推荐使用的Microsoft System.Data.OracleClient驱动程序。这修复了事务支持。不确定为什么不推荐的驱动程序在一台服务器上工作,而在另一台服务器上不工作,但我想它已经不推荐了,所以我不打算进一步研究它。

该sessionFactory的代码是什么?GetSession不是ISessionFactory的一种方法,所以我认为这是一种不同的方法。实际上,我已经将它缩小到直接的ADO.NET代码。我在