Global.asaxで次のコードを使用します。
DbDatabase.SetInitializer<MyDBContext>
(new DropCreateDatabaseIfModelChanges<MyDBContext>());
しかし、それは機能していないようです。
モデルが変更され、新しく追加されたテーブルの1つを使用しようとしていますが、テーブルが見つからなかったと表示されます。
Invalid object name 'dbo.TableName'.
ただし、これを実行すると、機能しているように見え、テーブルが作成されています。
DbDatabase.SetInitializer<MyDBContext>(new DropCreateDatabaseAlways<MyDBContext>());
それは私のデータベースを更新します。
私が間違っているのは何ですか?
これは、マスターデータベースに対するユーザー権限であることが判明しました。 DropCreateDatabaseAlwaysを使用するのに、IfModelChangesのように、マスターデータベースに対するアクセス許可が必要ないのは奇妙なことです。
価値があるのは、ブラウザを閉じた後もカッシーニがまだ実行されていたため、DropCreate戦略の両方で多くの問題に遭遇しました。 (IIS Expressでも同じ問題が発生しました。)ローカルWebサーバーがまだ実行されていたため、Application_Start
は再び起動しなかったので、そこに置いた初期化は実行されませんでした。
[編集して続行]を有効にして解決しました。
プロジェクトプロパティ> ウェブ> デバッガー> 編集と続行を有効にする
これにより、ブラウザが閉じたときにローカルWebサーバーが強制的に閉じられます。
私は同じ問題を抱えていました:
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<BreakAwayContext>());
私の場合、上記のコード行を追加したときにデータベースはすでに存在していました。データベースを削除してプログラムを再度実行すると、期待どおりに動作し始めました。データベースで「Enable-Migrations」を使用していたことが原因である可能性があるのは、他の競合だけでした。
HTH
この動作は、IncludeMetadataConventionを削除した場合に予想されます:modelBuilder.Conventions.Remove<System.Data.Entity.Database.IncludeMetadataConvention>();