アプリケーションで問題に直面しました。2 つのデータベースがあり、NHibernate を使用して両方にアクセスしたいのですが、構成ファイルには 1 つのデータベースに対して 1 つの接続文字列しかありません。では、NHibernate に複数の接続文字列を渡すにはどうすればよいでしょうか?
質問する
4568 次
2 に答える
3
私は通常、 my で接続文字列を定義します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 つの異なるデータベースがある場合)。
セッション ファクトリを作成できる 1 つのクラスを使用します。
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 に答える