2011-05-31 85 views
2

我有NHibernate配置與Fluent NNibernate連接到PostgreSQL數據庫。NHibernate ISessionFactory.OpenSession()不打開數據庫連接

我有一個工作人員類,它將ISessionFactory作爲構造函數參數並使用隊列中的消息。對於每條消息,工作進程調用ISessionFactory.OpenSession()並執行一些數據庫處理。

當我添加更多工作進程時,系統的性能保持不變,這很奇怪。 經過一番調查後,我意識到所有工作進程正在使用單個數據庫連接。例如,我會添加8個工作進程,但在數據庫上我只能看到一個數據庫連接。

我的理解是,ISessionFactory.OpenSession()將打開一個新的數據庫連接,除非連接池已滿。

所以是我的理解錯誤或是這和Postgres NHibernate驅動程序的問題。

回答

3

OpenSession在需要之前不會打開數據庫連接,它會盡快關閉它(即將其釋放回池中)。

+0

我的問題很可能在於信息是如何消耗掉,而不是與NHibernate如何處理連接。 – 2011-06-01 13:54:57

3

默認情況下,會話將保持連接在事務生命期間保持打開狀態,正如迭戈所說,它只在需要時纔打開它。

如果要管理自己的連接,你可以叫

ISessionFactory.OpenSession(myConnection); 
+0

這是正確的。但是,用戶管理的連接有許多缺點,所以他們強烈不鼓勵。 – 2011-06-01 01:43:48