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)方法没有被调用,没有数据被放入我的数据库。

DropCreateDatabaseAlways Seed未被调用

您的数据库将在稍后使用上下文或您总是可以通过在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
}