DropCreateDatabaseAlways Seed未被调用
本文关键字:调用 Seed DropCreateDatabaseAlways | 更新日期: 2023-09-27 17:51:04
我有一个问题得到种子方法被调用在我的自定义数据库初始化器。我使用EF 5.0,并有以下代码:
public static class MyDatabase
{
public static void Initialize()
{
Database.SetInitializer(new MyInitializer());
}
}
public class MyInitializer : DropCreateDatabaseAlways<MyContext>
{
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
}