2011-05-31 86 views
2

我有NHibernate配置与Fluent NNibernate连接到PostgreSQL数据库。NHibernate ISessionFactory.OpenSession()不打开数据库连接

我有一个工作人员类,它将ISessionFactory作为构造函数参数并使用队列中的消息。对于每条消息,工作进程调用ISessionFactory.OpenSession()并执行一些数据库处理。

当我添加更多工作进程时,系统的性能保持不变,这很奇怪。 经过一番调查后,我意识到所有工作进程正在使用单个数据库连接。例如,我会添加8个工作进程,但在数据库上我只能看到一个数据库连接。

我的理解是,ISessionFactory.OpenSession()将打开一个新的数据库连接,除非连接池已满。

所以是我的理解错误或是这和Postgres NHibernate驱动程序的问题。

回答

3

OpenSession在需要之前不会打开数据库连接,它会尽快关闭它(即将其释放回池中)。

+0

我的问题很可能在于信息是如何消耗掉,而不是与NHibernate如何处理连接。 – 2011-06-01 13:54:57

3

默认情况下,会话将保持连接在事务生命期间保持打开状态,正如迭戈所说,它只在需要时才打开它。

如果要管理自己的连接,你可以叫

ISessionFactory.OpenSession(myConnection); 
+0

这是正确的。但是,用户管理的连接有许多缺点,所以他们强烈不鼓励。 – 2011-06-01 01:43:48