迁移种子方法忽略数据库初始化程序的种子方法

时间:2017-05-03 10:18:43

标签: asp.net asp.net-mvc entity-framework ef-migrations seeding

我正在使用Asp.Net Mvc应用程序,然后我想使用我创建的自定义数据库初始化程序类来播种数据库。

所以这是我的DbContext

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> {
    public ApplicationDbContext()
        : base("defaultConnection", throwIfV1Schema: false) {
    }

    static ApplicationDbContext() {
        Database.SetInitializer(new ApplicationDbInitializer());
    }

这是我的ApplicationDbInitializer课程:

public class ApplicationDbInitializer : DropCreateDatabaseIfModelChanges<ApplicationDbContext> {

    protected override void Seed(ApplicationDbContext context) {
        InitializeIdentityForEF(context);
        base.Seed(context);
    }

    public static void InitializeIdentityForEF(ApplicationDbContext db) {

        // Create Role Admin if it does not exist
        // Add user admin to Role Admin if not already added
        // And some more initializing stuff

    }
}

注意:我也使用Migrations

所以当我尝试使用命令Update-Database更新和播种我的数据库时(即使我手动删除了数据库),正在创建数据库但它没有播种它。

如果我做错了什么或者有其他方式我会感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这听起来与this question中的问题相同。

因此,种子代码只会在您创建ApplicationDbContext

的实例时运行

将这样的代码添加到应用程序启动中:

var ctx = new ApplicationDbContext();
ctx.Database.Initialize(true);

然后,您的数据库将在下次启动应用时播种。

或者,如果要使用Update-Database命令为数据库设定种子,则使用不同的 Seed方法。您可以看到示例here