2

SessionFactoryタイトルにあるように、複数のデータベースでを「再利用」する方法はありますか?インスタンス化にSessionFactoryは時間がかかるので、接続/データベース名だけを変更して、これらのインスタンスをプールして再利用できるのではないかと思います。明らかに、第1レベルのキャッシュはクリアされますが、ファクトリ自体のインスタンス化に伴うペナルティを回避しようとしています。

背景には、まったく同じスキーマを持ついくつかの小さな「プラグ可能な」データベースを作成できるため、NHibernateが毎回すべてのマッピングを再構築する必要はありません。

4

1 に答える 1

5

最初にターゲット データベースに適した標準の ADO.NET オブジェクトを開き、次のように NH インスタンスに渡すことでSession、異なるデータベースの同じセッション ファクトリからインスタンスを動的に作成できます。ConnectionSessionFactory

    var connection = new SqlConnection("target DB connection string");
    var session = sessionFactory.OpenSession(connection);
    CurrentSessionContext.Bind(session);

上記の簡略化されたコードに示されているように、ADO.NET 接続インスタンスを直接作成するのではなく、依存性注入コンテナーを使用して ADO.NET 接続インスタンスの有効期間と破棄を制御することをお勧めします。

もう 1 つの問題は、NHibernate がSessionFactoryインスタンスの起動時にデータベース アクセスを実行することです。そのため、有効な接続文字列を hibernate.cfg.xml ファイルに指定するか、それをセッション ファクトリ構成ロジックに動的に挿入する必要があります。

アップデート:

Groo は、NHibernate でデータベースを動的に切り替えることに関するすばらしい投稿へのリンクを提供しました。上記のサンプル コードのようなことを行うのではなく、その投稿のアドバイスに従ってください。

于 2012-10-05T15:55:24.560 に答える