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:在映射中急切加载多个集合