nhibernate - 为同一个映射表切换数据库

标签 nhibernate fluent-nhibernate nhibernate-mapping fluent-nhibernate-mapping

我使用 Fluent NHibernate,现在必须处理存档数据,其中同一个表存在于多个 MSSQL 数据库中。根据用户提供的日期值,我必须连接到不同的数据库,而所有映射信息保持不变。

更具体:如果提供的日期值在当年内,则使用 DB CUR,否则使用年度 DB(2011、2010、2009,...)。

现在有一段时间,人们告诉我,一遍又一遍地重新创建 SessionFactory 是一件相当昂贵的事情,所以我心想,必须有一种方法来使用现有的 sessionFactory,更新我的 ClassMap (例如将架构从“CUR.DBO”更改为“2011.DBO”)并重新连接。

我尝试搞乱 FluentConfiguration 和 SessionFactory,但是然后我的膝盖中了一箭找不到在运行时刷新映射的方法。

我最终会创建一个新的 SessionFactory 吗?或者有人知道在运行时重新初始化(流畅)NHibernate 映射的可行过程吗?

编辑:一个非常重要的细节,SqlConnection 也是外部提供的。它提供对所有数据库的访问,这意味着从理论上讲,我永远不必创建连接。因此,基本上我要做的就是为每个存档创建一个 SessionFactory 来更新映射的架构信息,指向另一个数据库。但这正是我被困住的地方。

最佳答案

确实,创建 session 工厂比创建 session 要昂贵得多,因此您当然不希望为数据库的每个查询都创建一个 session 工厂。

但是,根据我的经验,最多只需要几秒钟。

我建议您每次用户选择不同的年份时都创建一个新的。如果您在发生这种情况时给他们良好的反馈(可能是一个对话框,上面写着“连接到 2010 数据库”,带有进度条),他们可能不会介意等待。

一旦您创建了一年的查询,如果他们在同一年进行更多查询,您就可以重复使用它,因此他们只需每年等待一次查询。

如果 session 工厂创建花费的时间太长,我见过一些帖子解释如何保存或缓存配置以减少创建时间。然而,快速谷歌没有找到任何好的链接,所以你可能需要研究一下,或者问另一个问题。

关于nhibernate - 为同一个映射表切换数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10124174/

相关文章:

c# - Nhibernate - 方言不支持 DbType.Double

c# - 尝试运行 Fluent NHibernate 教程示例时出现运行时错误

c# - 在没有对象属性的情况下在 Fluent NHibernate 中映射外键

java - 使用 map 集合 hibernate 多对多

nhibernate - NHibernate Validator 中的业务规则验证

c# - 如何使用 FK NHibernate 映射复合 PK

NHibernate:在读取过程中使用(var tx = session.BeginTransaction()){} 而不使用 Commit() 可以吗?

nhibernate - Fluent NHibernate 生成额外的列

c# - FluentNHibernate 查询多对多关系对象

c# - 在使用 Fluent NHibernate 映射时对接口(interface)进行编程