使用EF6 Code First首次运行应用程序时播种数据库的问题

时间:2014-04-07 19:56:34

标签: c# asp.net entity-framework

我最近升级到了Entity Framework 6,它似乎打破了数据库的种子。

DataContext.cs

public class DataContext : DbContext
{
     public DbSet<BlogSettings> BlogSettings { get; set; } 
}

DataContextInitializer.cs

public class DataContextInitializer : CreateDatabaseIfNotExists<DataContext>
{
    protected override void Seed(DataContext context)
    {
        var blogSettings = new BlogSettings()
        {
            BlogTitle = "My Blog",
            MaxBlogsOnHomepageBeforeLoad = 20
        };

        context.BlogSettings.Add(blogSettings);
        context.SaveChanges();
    }
}

注意:种子有更多的数据库集和代码,但它们看起来都像这样,并且正在使用以前的版本。

我是由MS SQL Server中的数据库创建并创建了一个用户。我添加了连接字符串。然后我去运行应该导致生成表的Web应用程序,但是我得到了这个:

为上下文“DataContext”启用了迁移,但数据库不存在或不包含映射表。使用迁移创建数据库及其表,例如通过从程序包管理器控制台运行“Update-Database”命令。

我在Configuration.cs中将迁移设置为false,并且我没有_MigrationHistory表。

Configuration.cs的构造函数

public Configuration()
{
    AutomaticMigrationsEnabled = false;
}

我在我的web.config中有这个应该初始化: <add key="DatabaseInitializerForType DataContext, Test" value="DataContextInitializer, Test" />

我已尝试在<entityFramework> <contexts>下添加Global.asax.cs,我也尝试在Database.SetInitializer(new DataContextInitializer()); using (var context = new DataContext()) { context.Database.Initialize(true); } 初始化它,但无济于事。

{{1}}

1 个答案:

答案 0 :(得分:0)

我们最近添加了一个在AssemblyInfo.cs之前运行的类,它在初始化程序有机会运行之前进行调用。