【问题标题】:what is the reason of getting 'Unable to update database error' when giving enable-migrations command给出 enable-migrations 命令时出现“无法更新数据库错误”的原因是什么
【发布时间】:2016-12-15 17:56:37
【问题描述】:


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

当我给出命令 'enable-migrations'
package-manager 控制台输出如下错误:

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

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

如果我使用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"
        });
    }
}

【问题讨论】:

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


    【解决方案1】:

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

    您可以删除您的数据库,以便它使用更改重新初始化,或者将您的初始化程序切换到MigrateDatabaseToLatestVersion。这是initializers and seeding上的一篇好文章。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 2022-08-16
      • 1970-01-01
      • 2023-02-09
      • 2017-02-20
      • 1970-01-01
      • 2014-03-30
      相关资源
      最近更新 更多