2009-07-03 82 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更新为最新版本。这解决了我的问题。