2012-05-02 12 views
3

私はEF 4.3.1を使用しており、1つの基本コンテキストを駆動する100以上のコンテキストを持っています。すべてのコンテキストで、私はデータベースの初期化を無効にします。Entity Framework 4.3のデータベース初期化を無効にする

Entity Frameworkの既定の動作を設定することはできますか?事前に

おかげ

+0

における現在のdbContextタイプがちょうど指すようにたかっているDatabase.SetInitializer<YourDbContext>(null); あなたはおそらく、あなたが複数の文脈に対してこの振る舞いを必要としていることを言及するためにあなたの質問に言い直すべきであるということです提供されたすべての回答は、任意のコンテキストでOKです。また、冗長であるため、質問のタイトルにタグを使用しないでください。私はあなたが同時にそれを言い換えるべきであると感じているので、私はそれを編集しないことにしました。 – julealgon

+0

この質問は非常に古くなっていますが、どうしてあなたのコード内のイニシャライザ行をコメントアウトしていないのですか? – rism

答えて

0
//Gather all the DbContexts types in the assembly 
var allDbContextsTypes = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.BaseType == (typeof(DbContext))).ToList(); 

foreach (Type dbContextType in allDbContextsTypes) 
{ 
    //Get the SetInitializerMethod 
    MethodInfo initializerMethod = typeof(Database).GetMethod("SetInitializer"); 

    //Make it generic! (Oh yeah) 
    MethodInfo dbContextInitializerMethod = initializerMethod.MakeGenericMethod(dbContextType); 

    //Invoke the method with null initializer 
    dbContextInitializerMethod.Invoke(null, new object[]{null}); 
} 

で与えられ、それは次のようなものを与える:YourDbContextはあなたのループ

2

Database.SetInitializer<TContext>あなたが後にしているものです。また、nullをこのメソッドに渡すと、初期化が無効になります。

http://msdn.microsoft.com/en-us/library/gg679461(v=vs.103).aspx

+0

私は100以上のエンティティを編集したくないので、これは私が探しているものではありません。このコードをベースコンテキスト用に実行すると、何も変更されずにdbが作成されます。 –

+0

DbInitializerコードがすべての派生コンテキストにある場合は、派生コンストラクタが基本コンストラクタの後に実行されるため、このコンストラクタはターンオフしてから再びオンになるため、この動作はしません。 – rism

1

は、データベースの初期化を無効にするには、あなたの* の.configファイルを変更することができます。これはコンテキストごとに行われますが、基本コンテキストではうまくいくかもしれません。

<contexts> 
    <context type=" Blogging.BlogContext, MyAssembly" disableDatabaseInitialization="true" /> 
</contexts> 

より良い説明は終わりでEF 4.3 Configuration File Settings

+0

いい考えですが、基本コンテキストではうまくいきませんでした。 –

+0

コードが設定を上書きするため、これは機能しません。 – rism

関連する問題