DropCreateDatabaseAlways种子未调用

我在自定义数据库初始化程序中调用Seed方法时遇到问题。 我正在使用EF 5.0并具有以下代码:

public static class MyDatabase { public static void Initialize() { Database.SetInitializer(new MyInitializer()); } } public class MyInitializer : DropCreateDatabaseAlways { protected override void Seed(MyContext context) { base.Seed(context); context.Roles.Add(new Role { ID = 1, Name = "User", }); context.Roles.Add(new Role { ID = 2, Name = "Admin", }); context.SaveChanges(); } } 

这两个类存在于MVC应用程序的单独类库中。 在Global.asax ,我调用Initialize()方法:

 MyDatabase.Initialize(); 

数据库创建得很好,只是没有调用Seed(MyContext context)方法,没有数据放入我的数据库。

您将在以后使用上下文时创建数据库,或者您可以始终使用Global.asax.cs中的Application_Start()方法中的上下文强制创建数据库,如:

  System.Data.Entity.Database.SetInitializer(new MyInitializer()); MyContext db = new MyContext(); db.Database.Initialize(true); 

在我的情况下,没有调用Seed,因为我启用了迁移。 当我删除迁移时,它有效。 http://entityframework.codeplex.com/workitem/1689

将第一个SQL查询发送到数据库后,将调用Seed方法,而不是在Application_Start 。 例如:

 using (var ctx = new MyContext()) { var rolesCount = ctx.Roles.Count(); // should return 2 }