2

SQLサーバーバックエンドを備えたasp.net-MVCWebサイトがあります。100の異なるテーブルがあり、このサイトは300人の組織で機能します。

今度は別の組織で使用したいと考えていますが、サイトを拡張する方法に関する技術的な問題があります。要件のいくつかを次に示します。

バックグラウンド:

両方の組織で完全に再利用されるテーブルはたくさんありますが、その特定の組織に関連するレコードのみを取得するようにフィルターを追加する必要があるテーブルもたくさんあります

それを考えると、私は この質問のように、またはJoelのポッドキャストで説明されているように単一または複数のデータベースを決定する必要 があります(両方の組織を調べたいユーザーがいるため、可能であれば単一のデータベースに保持しようとしています)。マルチテナントデータベースの決定で共有する必要があります

ポッドキャストで説明されているように、例としてPeopleテーブルがあります。これは、Peopleテーブルをクエリするだけの場合は、クエリに「where Person.Org = "A」を追加するだけなので簡単です。ただし、 Peopleテーブルと直接または間接的に結合するクエリにも影響します。 Carテーブルがあり、Owner列( Peopleテーブルへの外部キーになります)があります。Carsのドロップダウンがある場合は、最初にPeopleと結合してから、そのフィルターを追加する必要があります(Select *車から)私はnhibernateを使用していますが、あなたはポイントを取得します

質問:

今の私の焦点は、この新しい組織をサポートするために、すべてのasp.net-mvcコントローラーアクションの周りに追加のスイッチを設定する方法を決定しようとしていることです。したがって、40個のコントローラーがあり、各コントローラーに10個のアクションがある場合、400個のアクションとすべてのページ(および特定のURLを指すようにすべてのビューとJavaScriptコードを更新する必要があります。最初に自分がどの「モード」であるかを判断する必要があります。 org1またはorg2のどちらを照会する必要があるかを判断するために

すべてのコントローラーアクションを実行して、新しいパラメーターや「組織名」などのルートを追加したくないので、何かアイデアがあるかどうかを確認したいと思いました。2つの異なるWebサイトを実行したとしても、これを単一のコードベースで実行したい場合は、このグローバルスイッチが必要になります。

すべてのコントローラーアクションにパラメーターを追加しないようにするための提案はありますか?

4

2 に答える 2

1

テーブルのセットが限られている (少なくとも、Controller アクションを実行するテーブルが少ない) こと、および CRUD 操作が集中化されていることを前提として、ユーザーがログインしたときにセッションで orgId を設定し、その値を使用してすべてのクエリをフィルター処理することができます。 ?

于 2013-03-09T03:33:30.953 に答える
0

Customer ID / Nameルートに を追加すると役立ちますか? 私は同様のアプリケーションに取り組みましたが、ルート パターンは次のようになります。

{customer}/{controller}/{action}/{id}

既にコード ベースがあるため、customer をオプションのパラメーターとして追加できます。

{controller}/{action}/{id}/{customer}

...
customer = UrlParameter.Optional

いずれにせよ、Url アクションでルート値を提供する必要があります。私の場合、すべてのコントローラーは、カスタム属性またはコードを介して、顧客を識別し、セキュリティ、承認などをチェックする基本コントローラーから継承します。CurrentCustomer基本コントローラーは、必要なすべての情報を含む保護されたプロパティを設定します。同じインターフェイスに顧客ユーザーまたは管理者ユーザーがアクセスできるため、非常にうまく機能します。管理者ユーザーは複数の顧客の情報にアクセスでき、アプリケーションは複数のデータベースで動作します (1 つのデータベースに複数の顧客を含めることができます)。

顧客 ID を SQL ステートメント / SP に渡さないようにする (そして多くのコード変更を行う) ために、顧客ごとに個別のデータベースを用意する方がよいと思います。顧客に基づいて、どのデータベースを使用するかを実行時に特定するだけで済みます。

于 2013-03-09T00:37:03.983 に答える