Asp.net プロジェクトで EF Code First を使用しています。Code First はデータベースを正常に作成しましたが、データベースにデータをシードするのに適しています。次のようなカスタム データベース初期化子を使用しています。
namespace Toolkit.Model
{
public class EntitiesContextInitializer : DropCreateDatabaseIfModelChanges<ToolkitContext>
{
protected override void Seed(ToolkitContext context)
{
List<Server> Servers = new List<Server>
{
new Server { ServerName = "Server 16" },
new Server { ServerName = "Server 29" }
};
foreach (Server server in Servers)
{
context.Servers.Add(server);
}
context.SaveChanges();
}
}
}
Global.asax.cs に初期化子を設定し、データベースを次のように強制的に初期化します。
using Toolkit.Model;
namespace Toolkit
{
public class Global : System.Web.HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
Database.SetInitializer(new EntitiesContextInitializer());
var context = new ToolkitContext();
context.Database.Initialize(false);
}
...
}
問題は、イニシャライザが呼び出されないため、データベースにデータが入力されないことです。代わりに DropCreateDatabaseAlways を継承するように初期化子を変更しようとしましたが、まだ何もありません...ここで何が欠けていますか?
編集 データベースを削除した後、私のイニシャライザは正常に呼び出されました。ただし、テーブルを追加したとき (モデルが変更されたとき) や初期化子を DropCreateDatabaseAlways に変更したときなど、他のインスタンスで呼び出されなかったのはなぜだろうか。