2011-05-16 48 views
0

将数据库迁移到新服务器后,我的工作副本无法再连接到数据库。但我正在经历一些我没想到的事情。每当应用程序中的页面尝试连接到该数据库时,在构建会话工厂期间发生错误,即在ISession尝试显式连接(例如加载实体)之前发生错误。NHibernate:建立会话工厂涉及到连接数据库吗?

这是正确的吗?为什么建立会话工厂需要连接到数据库?

回答

1

建立会话工厂不一定连接到数据库。我编写了一个应用程序,它实例化会话工厂,以在根本不存在数据库时根据映射文件创建一个sql文件。

但你可以建议会话工厂通过使用如下的配置来创建数据库:

<property name="hbm2ddl.auto">create</property> 

我不会做它在生产,但它可能是单元测试非常有用。检查您的项目是否有这样的配置。

如果没有这样的配置,请检查错误消息是否有任何有用的信息,并查看堆栈跟踪以查看它发生的位置。

1

构建会话工厂时,它缓存了大量的查询,关系,元数据等。如果要求,它也会创建/更新数据库。这是我通过阅读SessionFactoryImpl类的一些代码得到的。

请记住,创建会话工厂的过程非常重量级,应该只对每个DataSource执行一次。如果你仔细想想,它可以缓存和引导一切可能的事情。

如果你真的想知道它为什么会发生,它做了什么,我建议你下载源代码并进行调试。

+0

谢谢 - 我知道构建会话工厂应该只发生一次在应用程序的一生中。我正在开发,所以我通过VS Web服务器运行应用程序,因此会话工厂频繁构建的原因。 – David 2011-05-16 12:27:54

+0

我没有通过会话工厂创建数据库,所以我仍然不知道为什么在会话工厂正在构建时NH似乎试图连接到数据库。 – David 2011-05-16 12:28:34