2011-07-13 118 views
3

我使用功能NHibernate與SQL Server 2008中新的應用程序和考慮,我無法理解的連接處理行爲我看到。NHibernate的連接池

我使用sp_who2監視連接,這裏是我所看到的:

  1. 在創建SessionFactory的,單一的連接被打開。這個連接 似乎保持開放,直到應用程序被殺死。一個新的會話被打開時

  2. 沒有打開連接。 (沒關係,我知道NHibernate會等到創建數據庫連接的最後時刻)。當我運行通過NHibernate的查詢

  3. 沒有新的連接連開。我必須假設它使用創建SessionFactory時創建的連接,該連接仍處於打開狀態。在查詢之後(在會話關閉之前)我設置了一個斷點,並且沒有新的會話出現在sp_who中。

運行通過一個單一的連接的整個應用是不能接受的(明顯)。 我如何確保每個ISession獲得自己的連接?我敢肯定有一些東西很明顯,我在這裏失蹤...提前

感謝。

回答

6

您看到的行爲是什麼NHibernate的具體 - 連接池是SQL Server的默認行爲。
即使這聽起來乍看之下尷尬,其實也是一件好事,因爲創建新的連接和維護它們是昂貴的。
(有關詳細信息,請參閱Wikipedia article about connection pooling

所以沒有必要試圖讓NH打開每個會話的新連接,因爲重用現有連接實際上提高了SQL Server的性能。