有没有办法为多个数据库重用NHibernate SessionFactory?

时间:2012-10-05 11:13:41

标签: .net nhibernate sessionfactory pooling

就像标题所说,有没有办法为多个数据库“重用”SessionFactory?由于实例化SessionFactory需要时间,我想知道是否可以集中这些实例并重用它们,只更改连接/数据库名称。显然,第一级缓存将被清除,但我试图避免实例化工厂本身所涉及的惩罚。

背景是我可以拥有几个具有完全相同模式的小型“可插拔”数据库,因此NHibernate不需要每次都重建所有映射。

1 个答案:

答案 0 :(得分:5)

您可以通过首先打开适用于目标数据库的标准ADO.NET Session对象并将其传递给NH {{1}来为不同数据库从同一会话工厂动态创建Connection个实例像这样的实例:

SessionFactory

我建议您使用依赖注入容器来控制ADO.NET连接实例的生命周期和处置,而不是直接创建它,如上面显示的简化代码所示。

另一个问题是,当 var connection = new SqlConnection("target DB connection string"); var session = sessionFactory.OpenSession(connection); CurrentSessionContext.Bind(session); 实例启动时,NHibernate会执行数据库访问,因此您需要在hibernate.cfg.xml文件中提供有效的连接字符串,或者将其动态注入会话工厂配置逻辑

更新:

Groo在NHibernate中动态切换数据库时提供了link to a great post。遵循该帖子中的建议,而不是像上面显示的示例代码那样。

相关问题