我在使用自定义数据库初始化程序调用Seed方法时遇到问题。我正在使用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)
方法,没有数据放入我的数据库。
答案 0 :(得分:13)
您的数据库将在以后使用您的上下文或时创建 您总是可以通过在Global.asax.cs中的Application_Start()方法中使用您的上下文来强制创建它,如:
System.Data.Entity.Database.SetInitializer(new MyInitializer());
MyContext db = new MyContext();
db.Database.Initialize(true);
答案 1 :(得分:3)
在我的情况下,没有调用Seed,因为我启用了迁移。当我删除迁移时,它有效。 http://entityframework.codeplex.com/workitem/1689
答案 2 :(得分:1)
将第一个SQL查询发送到数据库后,将调用Seed
方法,而不是Application_Start
。例如:
using (var ctx = new MyContext())
{
var rolesCount = ctx.Roles.Count(); // should return 2
}