3

会社の製品データベース用にコンテンツ管理システム (CMS) を作成しました。CMS は、多くのカスタム ページとアクションが混在する asp.net スキャフォールディングに基づいています。現在、7 つの製品があり、すべてが同じデータベース スキーマ (Entity Framework モデル ファースト) を共有し、すべて CMS で完全に実行されます。問題は、新しい製品を入手するたびに、CMS のクローンを作成app.configし、新しいデータベースで作業するために正しいデータベースを指すように接続文字列を変更する必要があることです。これは機能しますが、維持するのが面倒になり、より多くの製品を取得するにつれて完全に失敗します.

私がやりたいのは、ユーザーがログインするように指示され、選択に基づいて特定の製品に接続して編集するオプションが与えられる、一元化されたランディング ページを持つことです。アイデアは、ユーザーに応じてデータベースを切り替えることができる 1 つの CMS サイトを持つことです。すべての製品データベースを 1 つのマスター製品データベースに結合することはできません。

この目標を達成するためにどこから始めればよいのか、またはこれが単一の CMS を維持するという目標を達成するための正しい計画であるかどうかはわかりません。これに関するガイダンスを探しています。

4

2 に答える 2

2

データベース構造が同一であると仮定すると、エンティティ コンテキストのインスタンスを取得する任意の場所でファクトリ メソッドを使用し、そこにロジックを配置して、正しい接続文字列を取得できます (または、使用できる命名規則がある場合はそれを計算します)。たとえば、次のようなものが機能する場合があります。

    public static MyDatabaseEntities CreateEntityContext(string productName)
    {
        string connectionString = null;
        switch (productName.Trim().ToLower())
        {
            case "apples":
                connectionString = ConfigurationManager.ConnectionStrings["MyDatabase_Apples"].ConnectionString;
                break;
            case "pears":
                connectionString = ConfigurationManager.ConnectionStrings["MyDatabase_Pears"].ConnectionString;
                break;
            default:
                connectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;
                break;
        }
        return new MyDatabaseEntities(connectionString);
    }

次に、ランディング ページで計算した製品名を渡す CRM データ コンテキストのインスタンスが必要な場所で、このメソッドを使用します。

于 2012-10-26T21:32:20.150 に答える
0

ユーザーからデータベースへのマッピング用に別のデータベースを作成します。構造は次のようになります。

database UserMap 

    table Users
       username (composite primary key)
       dbID (composite primary key, foreign key to "Databases" table)

    table Databases
       dbID (primary key)
       connectionString

それで、

  1. テーブル「データベース」にデータベースのリストを入力します
  2. SQL を実行して、他の Web サイトからこの「UserMap」データベースにユーザーをコピーします。
  3. 各 CMS データベースにトリガーを記述して、それぞれの CMS でユーザーが作成または削除されたときにユーザーを追加または削除し、「UserMap」データベースを更新します。
  4. CMS のコードを変更して、この単一のデータベースを使用して、使用する接続文字列を検索します。

これにより、ルックアップのために単一のデータベースに依存し、管理された方法でそれらを切り替えることができます。いくつかの事前作業が必要ですが、トリガーがそこにある後は、それ以上何もする必要はありません。

于 2012-10-26T22:10:48.583 に答える