0

同じHttpRequestの間に2つの異なるデータベース(それぞれ異なるサーバー上)からデータを読み取る必要があるASP.NET 4 Webアプリケーション(MVC 4リリース候補、NHibernate 3、Fluent-NHibernate)があります。私は2つのリポジトリを持っています:IndividualRepositoryとProductRepositoryです。個別リポジトリは読み取り専用で、データベースAに接続します。製品リポジトリは読み取り/書き込みであり、データベースBに接続します。両方のデータベースのweb.configに接続文字列があります。

この「複数のデータベースサーバー」要件が課される前の私の戦略は、静的なHttpModuleを接続することでしたSessionFactoryProvider<WebSessionContext>ISessionこれには、 sessionFactoryProvider.GetCurrentSession()を介して返される静的メソッド「GetCurrentSession」がありました。次に、BeginRequestでを呼び出しsessionFactoryProvider.Bind()、EndRequestでを呼び出しますsessionFactoryProvider.Unbind()

2番目のデータベースサーバーを追加して、私の計画は2番目の静的SessionFactoryProvider<WebSessionContext>で対応するGetCurrentSessionメソッドを作成することでした。

目的をテストするために、2つのNUnitテスト(リポジトリごとに1つ)があり、セッションファクトリプロバイダーと同様のセットアップを行っていますが、今回はを使用していSessionFactoryProvider<ThreadStaticSessionContext>ます。ここでは、セッションコンテキストとしてThreadStaticを使用することが問題の一部であると思われますが、両方のリポジトリをテストすることはできません。テストを機能させることができなかったので、実際のWebアプリケーションを試していません。

テストを間違って書いているだけですか?ThreadStaticSessionContext統合テスト以外のものを使用する必要がありますか?それぞれのテストメソッドを分離で機能させることができましたが、両方のセッションファクトリプロバイダーが含まれている場合は1つしか機能しません。WebSessionContextテストが機能するようになったら、Webアプリで2つのファクトリプロバイダーを使用しても同様の問題が発生しますか?

どんな助けでも大歓迎です!

4

1 に答える 1

0

あなたの質問に答えるために-はい、単一のHTTPリクエスト内でNHibernateを使用して複数のDBサーバーに接続することが可能です。

私はそれを自分で使用していますが、どうやらあなたが使用しているものとは異なるセッション管理を持っています。でセッションをバインドしませんBeginRequest()。代わりに、IoCコンテナーを使用し、コントローラーのコンストラクターを介してを取得してISessionBuilderから、を介してセッションを要求しsessionBuilder.GetSession()ます。

そうは言っても、あなたの問題の解決策は私が配線したものと似ていると思います。基本的に、単一ISessionFactoryの辞書を保持する代わりに、それらの辞書を保持します(DBサーバー識別子でキー設定されています)。

これで実行可能な解決策が得られない場合は、のコードを提供する必要がありますSessionFactoryProvider

于 2012-07-16T11:20:00.057 に答える