Fluent NHibernate + 多个数据库 = Fluently.Configure() 映射到错误的数据库?

Posted

技术标签:

【中文标题】Fluent NHibernate + 多个数据库 = Fluently.Configure() 映射到错误的数据库?【英文标题】:Fluent NHibernate + Multiple Databases = Fluently.Configure() mapping to the wrong database? 【发布时间】:2014-01-29 17:05:54 【问题描述】:

所以我有一个静态类,用于创建 NHibernate ISessionFactories 字典(我访问的每个数据库/方言都需要一个)。现在我必须遗漏一些东西,因为虽然我的代码对单个数据库 100% 有效,但尝试配置第二个数据库失败,结果是因为它仍在映射到初始数据库(我通过从我的新数据库到我的旧数据库,并看着它工作)。这是我的代码(后面会有注释):

  public static class NHibernateFactory 
    private static Dictionary<String, ISessionFactory> _sessionFactory = new Dictionary<String, ISessionFactory>();

    public static void Initialize(Assembly assembly, String ConnectionStringKey) 
      if (ConfigurationManager.ConnectionStrings[ConnectionStringKey] != null) 
        IPersistenceConfigurer dbConnection = null;
        switch (ConfigurationManager.ConnectionStrings[ConnectionStringKey].ProviderName.ToLower()) 
          .
          . Various cases here for each type of database/dialect
          .
          case "system.data.sqlite":
            switch (ConfigurationManager.AppSettings[ConnectionStringKey].ToLower()) 
              case "standard": dbConnection = SQLiteConfiguration.Standard.ConnectionString(c => c.FromConnectionStringWithKey(ConnectionStringKey));
              break;
            
          break;
          .
          .
          .
        
        if (dbConnection != null) 
          _sessionFactory.Add(ConnectionStringKey, Fluently.Configure()
            .Database(
              dbConnection
            )
            .Mappings(m => 
              m.FluentMappings.AddFromAssembly(assembly);
            )
            .BuildSessionFactory()
          );
        
      
    

    public static ISession OpenSession(String ConnectionStringKey) 
      return _sessionFactory[ConnectionStringKey].OpenSession();
    

  

现在,我确定正确的程序集和 connectionstringkey 正在传入。我可以看到 dbConnection 也已正确设置。所以我完全困惑的是它在 m.FluentMappings.AddFromAssembly(assembly); 上失败了。带有“创建 SessionFactory 时使用了无效或不完整的配置”。错误信息。

就像我说的那样,在跟踪它之后,它似乎是由于它仍在从初始配置中引用数据库的事实。任何人都知道为什么会发生这种情况?或许我有什么误解。

有没有人有设置 Fluent NHibernate 以用于多个不同数据库的示例。

【问题讨论】:

【参考方案1】:

神奇的是,代码更改为零,这已经开始起作用了。如果出现,则可能是 Visual Studio 2010 的开发网络服务器的缓存问题(因为这是托管在 ASP.NET 应用程序中的 WCF 服务的一部分)。

【讨论】:

以上是关于Fluent NHibernate + 多个数据库 = Fluently.Configure() 映射到错误的数据库?的主要内容,如果未能解决你的问题,请参考以下文章

Fluent NHibernate:在映射中急切加载多个集合

Fluent Nhibernate 映射多重连接

Fluent NHibernate 仅级联删除关联记录

Fluent NHibernate:约定/KeyColumn

Fluent Nhibernate 数据库配置

使用 Fluent NHibernate 生成表索引