我有兩個IDbCommand對象是從一個NHibernate會話創建的,他們通過NHibernate會話進入事務。第一個數據庫命令將一個值插入到Oracle全局臨時表中,第二個命令從表中讀取值。通過Oracle GTT,兩個命令都需要一個事務來保存GTT中的數據。IDbCommand沒有正確入伍NHibernate事務
奇怪的是,當它在一臺服務器上運行時,第二個命令從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服務器後無法正常網羅IDbCommands?
那個「sessionFactory」的代碼是什麼? (GetSession不是一個ISessionFactory的方法,所以我認爲它是不同的) – 2010-08-03 01:42:23
我已經縮小到了直接的ADO.NET代碼。我在http://stackoverflow.com/questions/3397227/ado-net-transaction-does-not-enlist-commands-after-first-connection-is-opened-上發佈了另一篇文章 – 2010-08-03 14:01:37