2013-03-01 11 views
35

私はEntity Framework v4を使用しています。私はNerd Dinner tutorialの指示に従った。私は現在、開発モード(より高い環境にはリリースされていません)であり、モデルはまだ非常に揮発性であり、データを保持する気にはならないので、新しい展開ごとにテーブルを再作成したいと考えています。ただし、これは発生しません。テーブルは作成されたり変更されたりすることはありません。 Package Managerコマンドenable-migrations、add-migration(initial)を使用して移行モデルに移行すると、これは動作し、移行を使用します。しかし、私はまだ細かいマイグレーションを望んでおらず、最初の作成スクリプトだけが必要なので、マイグレーションフォルダを削除し、コマンド(enable-migrations、add-migration)をやり直してデータベースを手動で削除しなければならない私は何かを変える。コードファーストドロップ作成モードでEntity Frameworkを使用するにはどうすればよいですか?

最初にコードのドロップ/作成動作を行うにはどうすればよいですか?

答えて

50

データベース用にDropCreateDatabaseAlwaysイニシャライザを使用してください。

public class MyInitializer : DropCreateDatabaseAlways<YourContextName> 
{ 
    protected override void Seed(MagnateContext context) 
    { 
     // seed database here 
    } 
} 

:実際にあなたがしてDropCreateDatabaseAlwaysから継承されます、あなた自身の初期化を、作成し、データベースをシードする場合

Database.SetInitializer(new DropCreateDatabaseAlways<YourContextName>()); 

:それは常に最初のアプリケーションドメインでのコンテキストの使用時にデータベースを再作成しますそして、データベースがすでに存在していると、あなたのモデルを変更する場合は、あなたがを使用

コンテキストの最初の使用前
Database.SetInitializer(new MyInitializer()); 
+1

これは、データベースが存在しない場合にのみ機能します。データベースが存在し、モデルを変更した場合は何も起こりません。 構文も次のとおりです。 Database.SetInitializer(new DropCreateDatabaseAlways ()); –

+1

@RyanLangtonいいえ、それはデータベースを削除して作成します –

+2

実際には、あなたは正しいです。しかし、アプリケーション内でクエリを実行するまでは発生しませんでした。アプリケーションを起動するだけで何も起こりません。興味深い行動。 –

0

それを設定します

関連する問題