在给出enable-migrations命令时,获取“无法更新数据库错误”的原因是什么

时间:2016-12-15 17:56:37

标签: c# .net entity-framework ef-migrations


我在项目中首先使用EF 6和代码 我尝试使用'enable-migrations'命令来理解。
DbContext和Initializer示例的格式最简单,如下所示
当我给出命令'enable-migrations'时,package-manager控制台输出如下错误:

  

无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移。

但是如果我没有从MyDbContext构造函数调用InitializeDatabase();方法,则不会发生错误,也不会运行数据导入或种子方法。
只有数据库创建。

我想知道是什么原因以及这个错误的意思是什么如果我使用InitializeDatabase()方法。
谢谢

public class MyDbContext : DbContext
{
    public MyDbContext():base("TestDb")
    {
        Database.SetInitializer(new DbContextInitializer());
        InitializeDatabase();
    }

    protected virtual void InitializeDatabase()
    {
        if (!Database.Exists())
        {
            Database.Initialize(true);
        }
    }

    public DbSet<TestModel> TestModels { get; set; }
}

public class DbContextInitializer : CreateDatabaseIfNotExists<MyDbContext>
{
    protected override void Seed(MyDbContext context)
    {
        base.Seed(context);
        context.TestModels.Add(new TestModel() {
            Name = "Lorem",
            Surname = "Ipsum"
        });
    }
}

1 个答案:

答案 0 :(得分:1)

您的初始化程序继承自CreateDatabaseIfNotExists,这不是迁移的逻辑选择。您有一些未应用的未决模型更改,因为模型已更改,并且初始化程序仅在数据库不存在时才会运行。

您可以删除数据库,使其重新初始化更改,或将初始值设定项切换为MigrateDatabaseToLatestVersion。这是一篇关于initializers and seeding的好文章。