2010-06-03 109 views
1

我有一個現在已有4年多的應用程序,它在我們的最新部署中表現出一些奇怪的行爲。應用程序使用nHibernate進行所有插入/更新/選擇等。我們當前使用.NET 2.0和nHibernate 1.2(我知道,我們需要升級)NHibernate不會插入記錄

此部署位於Windows 2008 Server x64,IIS 7.5 - 到目前爲止,我所看到的是應用程序運行,但無法插入或更新數據庫中的記錄 - 讀取看起來很好,但寫入是一個問題。有些寫道實際上工作,插入到一些小表中,但大多數甚至沒有寫入數據庫。

使用SQL事件探查器,插入/更新永遠不會將它傳送到服務器,並且將log4net變爲DEBUG,並且show_sql爲真 - 出現select語句,但插入/更新語句根本不會將它記錄到日誌中,並從不在服務器上顯示。

更令人感到奇怪的是,應用程序似乎忘記了這一點 - commandandclose毫無例外地運行(打開httpmodule中的會話),域對象返回uuid的生成等等,但永遠不會持久化。

當然升級到期了,但我不願意在部署過程中嘗試升級,也沒有時間準確測試應用程序。有任何想法嗎?

回答

0

這兩個很好的答案,問題出在部署。 web.config是爲IIS6設置的,並且對IIS7的部署沒有正確設置用於提交事務的視圖HttpModule中的打開會話。將管道模式從「集成」更改爲「經典」可以解決問題。

1

退出當前的部署並返回到之前的狀態。然後找出有人犯的錯誤。如果它用於插入,而現在不用,那麼當前的代碼有些問題。如果它沒有創建插入/更新語句,那麼我會首先查看它們應該創建的位置。當前的deplyment是否實際插入記錄或在開發中更新它們?有沒有人測試過,或者你是否依賴它沒有彈出錯誤?如果它在開發中工作並且不能在產品中工作,我會考慮dev和prod之間的環境差異。

2

我的猜測是默認的ISession FlushMode已經從Auto改爲Never或者Commit。從不意味着當應用程序調用Flush()時會話會刷新;提交意味着會話將在事務提交時刷新。