对于MVC5网站,我想使用一个Entity Framework Database初始化程序来创建带有初始值的数据库并将其种子化。接下来,我要保留一个列表,该列表用于在创建初始数据库(带有一些初始值)时以受控方式运行。但是无论我如何尝试,迁移都是在创建和播种初始数据库之前执行的。经过大量尝试和阅读后,我得出了以下代码:

在global.asax.cs中:

Database.SetInitializer(new App_Start.ProjectHoursDatabaseInitializer());


初始化看起来如下:

public class ProjectHoursDatabaseInitializer : IDatabaseInitializer<ProjectHoursDbContext>
{
    public void InitializeDatabase(ProjectHoursDbContext context)
    {
        if (context.Database.Exists())
        {
            if (!context.Database.CompatibleWithModel(throwIfNoMetadata: false))
            {
                var migrator = new DbMigrator(new ProjectHours.Migrations.Configuration());
                migrator.Update();
            }
        }
        else
        {
            context.Database.Create();
             // The problem is that migrations are executed at this point
             // The migrations must not run (cannot run),
             // The only thing that must happen is creating tables
             // and inserting some initial data.

            SeedDatabase(context);
            context.SaveChanges();
        }
    }
}


迁移配置如下所示:

internal sealed class Configuration : DbMigrationsConfiguration<ProjectHours.ProjectHoursDbContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
        ContextKey = "ProjectHours.ProjectHoursDbContext";
    }

    protected override void Seed(ProjectHours.ProjectHoursDbContext context)
    {

    }
}


问题是无论我尝试什么,都将在尚未创建初始数据库的情况下执行迁移。我不明白在配置中,它明确指出应禁用自动迁移。
看来情况并非如此。任何的想法?

最佳答案

您是否尝试过:Global.asax中的Database.SetInitializer<ProjectHoursDbContext>(new CreateDatabaseIfNotExists());

关于c# - 数据库初始化后无法禁用迁移,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33055139/

10-09 07:11
查看更多