2011-05-16 70 views
0

將數據庫遷移到新服務器後,我的工作副本無法再連接到數據庫。但我正在經歷一些我沒想到的事情。每當應用程序中的頁面嘗試連接到該數據庫時,在構建會話工廠期間發生錯誤,即在ISession嘗試顯式連接(例如加載實體)之前發生錯誤。NHibernate:建立會話工廠涉及到連接數據庫嗎?

這是正確的嗎?爲什麼建立會話工廠需要連接到數據庫?

回答

1

建立會話工廠不一定連接到數據庫。我編寫了一個應用程序,它實例化會話工廠,以在根本不存在數據庫時根據映射文件創建一個sql文件。

但你可以建議會話工廠通過使用如下的配置來創建數據庫:

<property name="hbm2ddl.auto">create</property> 

我不會做它在生產,但它可能是單元測試非常有用。檢查您的項目是否有這樣的配置。

如果沒有這樣的配置,請檢查錯誤消息是否有任何有用的信息,並查看堆棧跟蹤以查看它發生的位置。

1

構建會話工廠時,它緩存了大量的查詢,關係,元數據等。如果要求,它也會創建/更新數據庫。這是我通過閱讀SessionFactoryImpl類的一些代碼得到的。

請記住,創建會話工廠的過程非常重量級,應該只對每個DataSource執行一次。如果你仔細想想,它可以緩存和引導一切可能的事情。

如果你真的想知道它爲什麼會發生,它做了什麼,我建議你下載源代碼並進行調試。

+0

謝謝 - 我知道構建會話工廠應該只發生一次在應用程序的一生中。我正在開發,所以我通過VS Web服務器運行應用程序,因此會話工廠頻繁構建的原因。 – David 2011-05-16 12:27:54

+0

我沒有通過會話工廠創建數據庫,所以我仍然不知道爲什麼在會話工廠正在構建時NH似乎試圖連接到數據庫。 – David 2011-05-16 12:28:34