0

MyDatabaseに対して実行されるwebsite1とwebiste2があります。

MyDatabaseには、dbo.Users、dbo1.Posts、dbo2.Postsというテーブルがあります。dbo.Usersとdbo1.Posts、およびdbo.Usersとdbo2.Postsの間には外部キー関係があります。

ウェブサイト1とウェブサイト2で同じコードベースを実行したいのですが、ウェブサイト1でdbo1.Postsから投稿を取得し、ウェブサイト2でdbo2.Postsから投稿を取得することはできますか?

目的のスキーマ(dbo1またはdbo2)は構成ファイルから取得されると考えられます。

私の状況では、dbo1.Postsとdbo2.Postsの情報は機密情報と見なされる可能性があります。両方にアクセスできるユーザーもいれば、一方にアクセスできるユーザーもいる可能性があります。したがって、私が見ているように、データベースを物理的または論理的に分離する2つのアプローチがあります。手元の私の仕事は、それが論理的に実行できるかどうかを調査することです

4

5 に答える 5

1

6つのステップ:

  1. タイプライブラリインポーターを使用して、ActiveXEXEの相互運用機能アセンブリを生成します。
  2. C#プロジェクトに相互運用機能アセンブリへの参照を追加します。
  3. Process.Startを使用してActiveXEXEを起動します。
  4. Marshal.GetActiveObjectを使用して、実行中のActiveX EXE内のオブジェクトの実行中のインスタンスを取得します(VBのGetObjectと同じです)。
  5. 前の手順で返されたオブジェクトを、相互運用機能アセンブリで定義された同等のタイプにキャストします。
  6. オブジェクトに対して実行する必要があることは何でもします。
于 2012-04-24T05:21:01.867 に答える
1

このリンクでは、コードファーストマッピングを使用してクラスのスキーマを指定する方法について説明します。2つの異なるスキーマで同じクラス/テーブルを使用しないようにアプリケーションをリファクタリングできない場合は、dbo1にマップするPost1とdbo2にマップするPost2の2つのPostクラスを定義する必要があります。さらに、User.Post1sとUser.Post2sが必要なユーザーの投稿を取得しようとすると、インピーダンスが発生します(大雑把な例です。申し訳ありません)。

したがって、選択の余地がない限り、重複するテーブルを回避するためにこれをリファクタリングします。

于 2012-04-24T04:36:27.340 に答える
0

コンテキストを作成するときにスキーマ名を動的に設定する場合の代替ソリューションは次のとおりです...基本的に@BradleyHの回答に似ていますが、構成クラスから読み取る代わりに、スキーマ名をマッピングメソッドの引数として使用します/コンストラクター。

詳細な説明については、こちらをご覧ください:https ://stackoverflow.com/a/14782001/243607

于 2013-02-08T22:07:40.283 に答える
0

正直なところ、私はあなたのデザインを再評価し、ソースを示す列をPostテーブルに追加します。はるかにシンプルでクリーン。

于 2012-04-24T04:30:07.530 に答える
0

さて、これが最終的に起こったことです。それが最善の解決策であるかどうかはまだわかりませんが、誰かがこの質問に対する答えを探しに来た場合、私はそれを機能させる方法を見つけました。

そうは言っても、私はまだマットに同意し、これを行うためのより簡単な方法があるはずだとハッキングしました。

私のパズルには3つの異なる写真があります。

最初に、問題のエンティティからテーブルへのマップがあり、ここで次を使用しました。

this.ToTable("Posts", ConfigurationHelper.GetSiteSchema());

次に、Web.configファイルのAppSettingsから読み取る構成ヘルパーの行がありました

    public static string GetSiteSchema()
    {
        return ConfigurationManager.AppSettings["SiteSchema"];
    }

web.configファイルの3番目に、次のようにAppsettingsを追加しました。

 <appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    <add key="SiteSchema" value="dbo1"/>
  </appSettings> 

アプリをビルドして実行した後、dbo1.Postsから投稿を取得します。次に、web.configファイルの文字列を「dbo2」に切り替え、ページを更新して、dbo2.Postsからの投稿を確認できます。

于 2012-04-29T04:29:15.667 に答える