マルチテナントアプリケーションで複数のデータベーススキーマを使用する

architecture asp.net-mvc dapper multi-tenant

質問

現在のアプリケーションをマルチテナントアーキテクチャに移行しています。 1つのコードベースで、私は複数のテナントに対処する必要があります。私は単一のデータベース、複数のスキーマのアプローチを使用しています。各テナントには、デフォルトのスキーマに保存されているメタデータを含む個別のスキーマが割り当てられます。

アプリケーションはASP.NET MVCで構築されています。 Dapperを使用してSQL Serverに接続します。私は直接クエリとストアドプロシージャを使用してデータベースを呼び出す50以上の関数を持っています。関数を変更せずにテナントごとにダッパーが初期化されたときにスキーマを設定できる方法はありますか?

受け入れられた回答

SQL Serverでは、スキーマはユーザーに関連付けられています。各ユーザーには、少なくとも1つのデフォルトスキーマがあります。テナントをスキーマに関連付けることができます。つまり、

テナント - >スキーマ - >ユーザー

SQL Connection文字列を動的に構築し、そのテナントに対応するSQLユーザーを渡します。この方法では、デフォルトのスキーマが自動的に指摘され、Dapperクエリを変更する必要はなく、動的クエリも作成する必要はありません。

注:接続プーリングの意味を確認することを忘れないでください。


人気のある回答

私は簡単なアプローチを試みます。

Dapperでは、簡単なメンテナンスのために、クエリを外部XMLファイルに格納します。したがって、お客様のそれぞれに外部XMLファイルを用意することができます。もう一つの解決法、しかし私はそれを試していない、私はあなたのクエリにスキーマ名になるパラメータを追加することができると思う。したがって、すべてのクエリで、常にスキーマを指定する必要があります。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow