エンティティ フレームワークを自動移行で動作させる方法が少しわかりません。私が欲しい:
- 存在しない場合に自動的に作成されるデータベース
- 機種変更時に自動更新するデータベース
後者については、DbMigrator を使用しています。かなり遅いので、リクエストごとに実行したくありません。また、同じアプリケーションに複数のデータベースがあるため、Application_Start に入れることができないため、次のように Session_Start に入れます。
if (Session["started"] == null)
{
// this takes care of any database updates that might be necessary.
MigrationConfiguration configuration = new MigrationConfiguration();
DbMigrator migrator = new DbMigrator(configuration);
List<string> pm = migrator.GetPendingMigrations().ToList();
if (pm.Count > 0)
{
migrator.Update();
}
}
else
{
Session["started"] = "started";
}
これが正しい方法かどうかはわかりませんが、機能しているように見えますが、データベースが存在しない場合、実際にはデータベースを生成しません。「ログインによって要求されたデータベース「db」を開けません」というメッセージが表示されます
以前は次のように機能していました。
Database.SetInitializer<DbContext>(new InitializerIfModelChange());
これはデータベースを削除し、データベースが存在しない場合に適したシード データを生成しますが、データベースが変更された場合にもトリガーされます (この場合、DbMigrator で処理する必要があります)。これは前に Application_Start にありましたが、よくわかりませんそれをどうするか。DbMigrator と競合するのではないかと心配しています。前述の 2 つのことを達成するには、どのように設定すればよいでしょうか?