我正在考虑将Fluent NHibernate用于SQL Server 2008的新应用程序,我无法理解我所看到的连接处理行为。
我正在使用sp_who2监控连接,这就是我所看到的:
创建SessionFactory时,会打开一个连接。这个连接 似乎保持开放,直到应用程序被杀。
打开新会话时未打开任何连接。 (没关系,我知道NHibernate会等到最后一刻创建数据库连接)。
即使我通过NHibernate运行查询,也没有打开新连接。我必须假设它正在使用创建SessionFactory时创建的连接,该连接仍然是打开的。我在查询之后(在会话关闭之前)设置了一个断点,并且sp_who中没有出现新的会话。
通过单一连接运行整个应用程序是不可接受的(显然)。 我如何确保每个ISession都有自己的连接?我确信这里有一些显而易见的东西......
提前致谢。
答案 0 :(得分:6)
您看到的行为与NHibernate无关 - 连接池是SQL Server中的默认行为
即使乍一看听起来很尴尬,但实际上这是件好事,因为创建新的连接并维护它们很昂贵。
(有关详细信息,请参阅Wikipedia article about connection pooling)
因此,无需尝试让NH为每个会话打开新连接,因为重用现有连接实际上可以提高SQL Server性能。