11

我在自定义数据库初始化程序上调用 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)没有调用方法,也没有数据进入我的数据库。

4

3 回答 3

13

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

  System.Data.Entity.Database.SetInitializer(new MyInitializer());
MyContext db = new MyContext();
db.Database.Initialize(true);
于 2013-01-11T21:48:56.393 回答
3

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

于 2015-11-06T20:02:28.817 回答
1

Seed一旦您将第一个 SQL 查询发送到您的数据库,而不是在您的Application_Start. 例如:

using (var ctx = new MyContext())
{
    var rolesCount = ctx.Roles.Count(); // should return 2
}
于 2013-01-09T17:23:23.943 回答