我在我的应用程序中遇到了问题:我有两个数据库,我想用 NHibernate 访问这两个数据库,但是在配置文件中我只有一个用于一个数据库的连接字符串。那么如何将多个连接字符串传递给 NHibernate?
问问题
4568 次
2 回答
3
我通常在我的app.config
:
<connectionStrings>
<add name="connection1" connectionString="Data Source=;User ID=;Password=;" />
<add name="connection2" connectionString="Data Source=;User ID=;Password=;" />
</connectionStrings>
然后我使用 nhibernate 配置创建 2 个单独的(nhibernate)配置文件(如果您有 2 个不同的数据库)。
我使用一个允许我创建会话工厂的类:
public class NHibernateSessionFactory
{
private ISessionFactory sessionFactory;
private readonly string ConnectionString = "";
private readonly string nHibernateConfigFile = "";
public NHibernateSessionFactory(String connectionString, string nHConfigFile)
{
this.ConnectionString = connectionString;
this.nHibernateConfigFile = nHConfigFile;
}
public ISessionFactory SessionFactory
{
get { return sessionFactory ?? (sessionFactory = CreateSessionFactory()); }
}
private ISessionFactory CreateSessionFactory()
{
Configuration cfg;
cfg = new Configuration().Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, this.nHibernateConfigFile));
// With this row below Nhibernate searches for the connection string inside the App.Config.
// cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionStringName, System.Environment.MachineName);
cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionString, this.ConnectionString);
#if DEBUG
cfg.SetProperty(NHibernate.Cfg.Environment.GenerateStatistics, "true");
cfg.SetProperty(NHibernate.Cfg.Environment.ShowSql, "true");
#endif
return (cfg.BuildSessionFactory());
}
}
现在我可以使用自己的特定配置创建许多不同的会话工厂:
var sessionFactory1 = new NHibernateSessionFactory("connection string 1", "sql.nhibernate").SessionFactory;
var sessionFactory2 = new NHibernateSessionFactory("connection string 2", "ora.nhibernate").SessionFactory;
你可以在这里找到更多信息。
于 2013-04-26T08:38:46.247 回答
1
对于每个数据库,您都需要一个自己的 SessionFactory。如果您在 NH 配置中省略 ConnectionString,您可以在构建 Sessionfactory 时在代码中指定它:
var sessionFactory1 = new Configuration()
.Configure()
.SetProperty("connection.connection_string", "First Connection String").BuildSessionFactory();
var sessionFactory2 = new Configuration()
.Configure()
.SetProperty("connection.connection_string", "Second Connection String").BuildSessionFactory();
于 2013-04-24T08:49:56.267 回答