给出 enable-migrations 命令时得到 'Unable to update database error' 的原因是什么

what is the reason of getting 'Unable to update database error' when giving enable-migrations command


我在项目中首先使用 EF 6 和代码
我尝试使用 'enable-migrations' 命令来理解。
DbContext 和 Initializer 示例采用最简单的形式,如下所示。

当我给出命令 'enable-migrations'
包管理器控制台输出如下错误:

Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration.

但如果我不从 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"
        });
    }
}

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

您可以删除您的数据库,以便它根据更改重新初始化,或者将您的初始化程序切换为 MigrateDatabaseToLatestVersion. Here is a good article on initializers and seeding