我正在使用NHibernate和mySQL 5,我有点不确定NHibernate是否真的关闭了与mySQL的连接。
这是我用来将Player实体保存到数据库的代码:
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.IsClosed属性为false。
为了释放NHibernate资源并关闭连接,我是否还需要做其他事情?连接是否已合并/超时?
如果有人能给我一个提示,那就太好了。
答案 0 :(得分:2)
我很确定Connection正在关闭。 ISession上的dispose方法就是这样做的。因此,在退出使用块时,它不可能保持打开状态。
另外,据我所知,连接通常只在写入/读取数据库时打开。会话可能是开放的,但这并不意味着连接也是开放的。
此外,在mysql documentation中,它表示关键字连接表示:
MySQL服务器的连接尝试次数(成功与否)。
并且没有说明连接的当前状态(打开与否),让我相信连接已关闭。
PS:您应该使用 Threads_connected 来查看打开的连接。
答案 1 :(得分:0)
某些版本的MySQL.Data dll中存在一个错误,导致我遇到同样的问题。确保将Connector / NET更新到最新版本。这解决了我的问题。