4

我没主意了。谷歌搜索,但仍然无法弄清楚为什么我的数据库初始化程序没有触发。我有 MyDbContext 类和 MyDbContextInitializer 类。在 Application_Start(使用 MVC4)中,我这样做:

// Initialize database
Database.SetInitializer(new MyDbContextInitializer());
MyDbContext context = new MyDbContext();
context.Database.Initialize(true);

我在 EF 5 中工作正常,但是当我切换到 EF6 时,MyDbContextInitializer 类中的 Seed() 永远不会被调用。为什么?

我的数据库上下文:

public class MyDbContext : DbContext
{
    public MyDbContext() : base("Name=MyDbContext")
    {
    }

    public DbSet<User> Users { get; set; }
    public DbSet<Role> Roles { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new UserConfig());
        modelBuilder.Configurations.Add(new RoleConfig());
    }
}

MyDbContextInitializer:

public class MyDbContextInitializer : DropCreateDatabaseAlways<MyDbContext>
{
    protected override void Seed(MyDbContext context)
    {
        var roles = new List<Role>
        {
            new Role {Name = "Administrator"},
            new Role {Name = "User"}
        };

        roles.ForEach(r => context.Roles.Add(r));

        context.SaveChanges();
    }
}

怎么了?谢谢。

4

1 回答 1

0

您的连接字符串是什么样的?如果您的连接字符串以某种方式设置,则 EF 认为您首先使用数据库并且不会触发初始化方法。

于 2013-11-26T14:46:53.867 回答