1

私はEF5コードを最初に使用し、構成に初期化子を設定します。1 つのアプリケーションで同じコンテキスト タイプの複数のデータベースを使用したいと考えています。私の接続文字列は次のようになります。

<add name="DatabaseProduction" connectionString="Server=localhost; Database=DatabaseProduction; User Id=***; password=***" providerName="System.Data.SqlClient"/>
<add name="DatabaseTest" connectionString="Server=localhost; Database=DatabaseTest; User Id=***; password=***" providerName="System.Data.SqlClient"/>

このようなコードでコンテキストを使用できます

var _contextProd = new MyContext("DatabaseProduction");
var _contextTest = new MyContext("DatabaseTest");

データベース初期化子を設定する通常の方法は、こちらで説明されている構成ファイルです。しかし、私が理解している限り、コンテキストごとに初期化子を設定できますが、接続文字列ごとに設定することはできません。違う?

問題は次のとおりです。たとえば、本番データベースにDropCreateAllwaysInitializerを持っているときに、テスト データベースにを設定するにはどうすればよいですか?CreateDatabaseIfNotExistsInitializer

============ Gertのコメントへの回答と明確化のために編集============

私が通常イニシャライザを定義する方法は

<contexts>
  <context type=" Namespace.MyContext, MyAssembly">
    <databaseInitializer type="Namespace.MyCustomContextInitializer, MyAssembly" />
  </context>
</contexts>

ここに 1 秒を追加して、別の context<context...>の初期化子を定義することもできます。しかし、どの接続文字列でどのイニシャライザが使用されているかをどのように見分けるのでしょうか? 言い換えれば、私の問題:

  1. 接続文字列には、そこにあるコンテキストに関する知識がありません。
  2. コンテキスト (コンテキスト セクション内) には、リンクされている接続文字列がわかりません
  3. コードビハインドでは、使用する接続文字列をコンテキストに伝えます
  4. 特定のコンテキストの初期化子は、各コンテキスト タイプに対して一種の静的であるようです。

繰り返しますが、コンテキストと接続文字列のペアに対して特定の初期化子を定義するにはどうすればよいですか?

4

1 に答える 1

0

私が考えることができる唯一の方法は、各接続文字列のコンテキストを導出することです。

public class MyProductionContext : MyContext
{
  public MyProductionContext()
    : base( "DatabaseProduction" )
  {
  }
}

public class MyTestContext : MyContext
{
  public MyTestContext()
    : base( "DatabaseTest" )
  {
  }
}

次に、派生コンテキストごとに初期化子を設定できます。

于 2012-12-10T08:37:57.540 に答える