DropCreateDatabaseAlways种子未调用

Jus*_*ura 11 .net c# asp.net-mvc entity-framework

我在自定义数据库初始化程序中调用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();
    }
}
Run Code Online (Sandbox Code Playgroud)

这两个类存在于MVC应用程序的单独类库中.在Global.asax,我称之为Initialize()方法:

MyDatabase.Initialize();
Run Code Online (Sandbox Code Playgroud)

数据库创建得很好,只是Seed(MyContext context)方法没有调用,没有数据放入我的数据库.

小智 13

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

  System.Data.Entity.Database.SetInitializer(new MyInitializer());
MyContext db = new MyContext();
db.Database.Initialize(true);
Run Code Online (Sandbox Code Playgroud)


Dar*_*rov 1

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

using (var ctx = new MyContext())
{
    var rolesCount = ctx.Roles.Count(); // should return 2
}
Run Code Online (Sandbox Code Playgroud)