就像标题所说的那样,有没有办法SessionFactory
为多个数据库“重用”a?由于实例化SessionFactory
需要时间,我想知道是否可以汇集这些实例并重用它们,只更改连接/数据库名称。显然,一级缓存将被清除,但我试图避免实例化工厂本身所涉及的惩罚。
背景是我可以拥有几个具有完全相同架构的小型“可插拔”数据库,因此 NHibernate 无需每次都重新构建所有映射。
就像标题所说的那样,有没有办法SessionFactory
为多个数据库“重用”a?由于实例化SessionFactory
需要时间,我想知道是否可以汇集这些实例并重用它们,只更改连接/数据库名称。显然,一级缓存将被清除,但我试图避免实例化工厂本身所涉及的惩罚。
背景是我可以拥有几个具有完全相同架构的小型“可插拔”数据库,因此 NHibernate 无需每次都重新构建所有映射。
您可以通过首先打开适用于目标数据库的标准 ADO.NET 对象并将其传递给 NH实例Session
,为不同的数据库动态创建实例,如下所示:Connection
SessionFactory
var connection = new SqlConnection("target DB connection string");
var session = sessionFactory.OpenSession(connection);
CurrentSessionContext.Bind(session);
我建议您使用依赖注入容器来控制 ADO.NET 连接实例的生命周期和处置,而不是像上面显示的简化代码中所示直接创建它。
另一个问题是 NHibernate 在SessionFactory
实例启动时执行数据库访问,因此您需要在 hibernate.cfg.xml 文件中提供有效的连接字符串,或者将其动态地注入到会话工厂配置逻辑中。
Groo 提供了一篇关于在 NHibernate 中动态切换数据库的精彩文章的链接。遵循该帖子中的建议,而不是像上面显示的示例代码那样做。