c# - 数据库初始化后无法禁用迁移

标签 c# entity-framework ef-code-first entity-framework-migrations

对于 MVC5 网站,我想使用一个 Entity Framework 数据库初始化器来创建一个数据库并为它设置一些初始值。接下来,我想保留一个迁移列表,我希望在创建初始数据库时以受控方式运行这些迁移(具有一些初始值)。但无论我尝试什么,迁移都是在创建和播种初始数据库之前执行的。经过大量尝试和阅读帖子后,我得出了以下代码:

在 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)
    {

    }
}

问题是无论我尝试什么,迁移都是在尚未创建初始数据库时执行的。我不明白这一点。在配置中它清楚地表明应该禁用自动迁移。 看起来情况并非如此。有什么想法吗?

最佳答案

你试过了吗:Database.SetInitializer<ProjectHoursDbContext>(new CreateDatabaseIfNotExists());在你的 Global.asax 中?

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

相关文章:

c# - .Net 开发与 SQLServer 的配对在 ORM 方面有什么优势?

c# - 使用 Web Api 身份和 token 时向用户播种数据库的正确方法

entity-framework - 是否有通用方法来测试数据库中是否存在对象?

c# - StreamWriter 在给定大消息时自动刷新缓冲区

c# - SelectListItem 投影的 EFCore SqlException 对值和文本使用相同的属性

c# - 自动生成可编译的 C# - 实现 INotifyPropertyChanged 的​​包装类

c# - 查询相同数据上下文时得到不同结果

ef-code-first - Entity Framework : I set the foreign key, SaveChanges 然后访问导航属性,但它不会加载相关实体。为什么不?

c# - 使用 DotNetZip 和 MemoryStream 时,解压缩数据被填充为 '\0'

c# - 自动缩进关闭