データベースを見ると、データベースが作成されてからモデルに変更が加えられたかどうかを判断するために Entity Framework が使用する「EdmMetadata」というテーブルが表示されます (これはあなたの場合です)。
デフォルトの動作では、モデルとデータベースが異なる場合に例外がスローされます。異なる動作を取得するには、IDatabaseInitializer<TContext>
.
幸いなことに、Entity Framework には、このインターフェイスの既定の実装がいくつか付属しています。
CreateDatabaseIfNotExists<TContext>
- データベースがまだ存在しない場合は、データベースが作成されます。
DropCreateDatabaseAlways<TContext>
- これにより、アプリケーションが実行されるたびにデータベースが再作成されます。
DropCreateDatabaseIfModelChanges<TContext>
- これにより、EdmMetadata テーブルで変更が検出された場合 (通常は新しいテーブルを作成した結果として)、データベースが再作成されます。
もちろん、メソッドをオーバーライドして、このインターフェイスの独自の実装を作成することもできますInitializeDatabase
。
これらの初期化戦略の 1 つを使用する例を以下に示します。
Database.SetInitializer(
new DropCreateDatabaseIfModelChanges<NameOfYourDbContextClass>())
データベースにすでに入力されているデータが失われる可能性があるため、初期化戦略を選択する前に慎重に検討してください。
Entity Framework によって提供される実装はSeed
、データベースを作成するたびに既定のデータを事前に読み込むことができるように、データベースにデータを読み込む方法を提供します。
この記事では、さらに詳しい情報を提供します。