2009-07-03 114 views
4

我正在使用NHibernate和mySQL 5,我有點不確定NHibernate是否確實關閉了與mySQL的連接。NHibernate的mysql連接沒有關閉?

這是我使用,以一個玩家的實體保存到數據庫的代碼:

 using (ISession session = SessionFactory.OpenSession()) 
     { 
      using (ITransaction transaction = session.BeginTransaction()) 
      { 
       session.Save(player); 
       transaction.Commit(); 
      } 
     } 

運行這段代碼後,我選擇當前連接使用MySQL服務器計算

show status like 'Conn%' ; 

並且每次值增加1!

因此,將播放器插入10次(=啓動程序10次)會使連接數增加10個。但NHibernate Session的session.IsClosed屬性爲false。

爲了釋放NHibernate資源並關閉連接,我還必須做其他事嗎?連接是否合併/超時?

如果有人能給我一個提示,那將會很棒。

回答

2

我很確定連接正在關閉。 ISession上的dispose方法就是這麼做的。所以退出使用塊時它不太可能保持打開狀態。

此外,從我所知道的連接通常只有在寫入/讀取到數據庫時纔會打開。會議可能會開放,但這並不意味着連接也是開放的。

也就是說,加上在mysql documentation,它說,關鍵字連接意味着一個事實:

連接嘗試(成功或失敗)到MySQL服務器的數量。

,不說有關連接(開放與否)的當前狀態什麼,讓我相信,連接被關閉。

PS:您應該使用Threads_connected查看打開的連接。

0

在某些版本的MySQL.Data DLL中存在一個錯誤,這對我造成同樣的問題。確保您將Connector/NET更新爲最新版本。這解決了我的問題。