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



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

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

您可以通过首先打开适用于目标数据库的标准 ADO.NET Connection对象并将其传递给 NH SessionFactory 实例,从同一会话工厂为不同的数据库动态创建Session实例,如下所示:

    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中动态切换数据库的精彩文章的链接。遵循该帖子中的建议,而不是执行上面显示的示例代码之类的操作。

最新更新