NHibernate留下的未激活会话
本文关键字:激活 会话 NHibernate | 更新日期: 2023-09-27 18:09:28
我正在使用Nhibernate连接到Oracle 11g数据库。数据库管理员让我检查一下这个程序,因为有很多未激活的会话被打开,显然这很快就会使服务器崩溃。
为什么Nhibernate不关闭连接?下面是一个示例代码:
public void Foo()
{
using (_sessionFactory = _Configuration.BuildSessionFactory())
using (_session = _sessionFactory.OpenSession())
{
_session.Transaction.Begin();
//DO STUFF
_session.Transcation.Commit();
}
}
我的印象是,处理会话和sessionFactory,将调用session. close(),连接将被关闭。
这只是连接池在做它的工作吗?如果是这样,我是否可以设置连接池的最大大小?最好是流利的Nhibernate?
查看您的代码,似乎您的代码允许创建多个会话工厂实例,最佳实践是只创建一个会话工厂。
当你使用连接池时,为每个会话工厂创建一个连接池,这似乎会导致不活跃的连接。
问题似乎是由事务的使用引起的。从上述代码中删除事务产生以下结果:
public class DoSomethingToDb(ISessionFactory sessionFactory)
{
using (_sessionFactory = _Configuration.BuildSessionFactory())
using (ISession session = sessionFactory.OpenSession())
{
//Do Stuff
session.Flush();
}
}
似乎没有什么问题。
然而,正如@LowFlyingPelican所建议的,我已经改变了会话工厂的创建,以便在应用程序启动时发生