1

CastleWindsorとFluentNHibernate(AutoMapping)は初めてです。
私は現在マルチテナントアプリケーションに取り組んでおり、次の要件があります。

  1. テナント情報を保存するマスターデータベース
  2. テナントごとのデータベース

Castle Windsorを使用して永続化機能を統合し、マスターデータベースにアクセスできます。マスターDbからテナントの接続情報を取得したいところに行き詰まり、この情報を永続化機能に再度渡して、新しいセッションを構築します。したがって、最終的にはマスターデータベースとテナント固有のデータベースにアクセスできるようになります。

誰かが私にこれをどのように進めることができるかを教えてもらえますか?

つまり
、ユーザーのログイン時に、ユーザーを検証し、マスターデータベースからそのテナントデータベース接続文字列を識別し、この情報を使用して、テナント固有のデータベース操作用の新しいセッションを構築します。

4

1 に答える 1

0

ISession から 2 つの派生クラス、IMasterSession と ITenantSession を作成します。これにより、コントローラーまたはビューモデルからデータベースを簡単に参照できます。

マスター データベース用の ISessionFactory 1 とテナント データベース用の 1 つの 2 つの登録を行う必要があります。これらを参照できるように名前を付けます。

次のように IMasterSession を登録します。

Component.For<ISession>().PerWebRequest().Named("masterSession").UsingFactoryMethod((k, m) =>
    {
        var masterFactory = k.Resolve<ISessionFactory>("masterSessionFactory");
        return masterFactory.OpenSession();
    }),
Component.For<object>().Forward<IMasterSession>().Proxy.MixIns(registration =>
    registration.Component("masterSession"))

セッション ファクトリはライフスタイル シングルトンに登録する必要があります。これは、アプリケーションで 1 つしか必要ないためです。セッションの有効期間は、作成しているアプリケーションの種類 (おそらく PerWebRequest) によって異なります。

これを行うためのより良い方法があるかもしれません。それを聞きたいです。

テナント データベースのアプローチも同様です。ただし、IDBConnection を受け取る OpenSession のオーバーロードを使用するか、カスタム接続プロバイダーを実装する必要があります。詳細については、こちらをご覧ください

これが役立つことを願っています。

敬具、

マルウィン。

于 2013-01-02T12:56:03.837 に答える