即使模型匹配我得到 - 无法更新数据库以匹配当前模型

时间:2018-01-28 08:32:27

标签: c# entity-framework

  • EF 6.2
  • SQL Server 2012

我得到了例外:

  

无法更新数据库以匹配当前模型,因为有   挂起的更改和自动迁移已禁用...

我完成了我的研究hereherehere

我已经有一个解决方案长期工作,没有任何问题。事实上,我几天前对数据库进行了更改,所有人都很好地使用标准add-migration,后跟update-database,没有任何问题。

但是今天我再次对数据库进行了更改,并add-migration后跟update-database。但是当我运行应用程序时,我得到了上述错误。

我通过在Application_Start中包含以下内容来确保迁移运行:

ConfigurationPlatform configurationPlatform = new ConfigurationPlatform();
DbMigrator migratorPlatform = new DbMigrator(configurationPlatform);
migratorPlatform.Update();

,配置类如下所示:

public sealed class ConfigurationPlatform : DbMigrationsConfiguration<TreasurePlatformDbContext>
{
    public ConfigurationPlatform()
    {
        AutomaticMigrationsEnabled = false;
        AutomaticMigrationDataLossAllowed = false;
        ContextKey = "TreasurePlatform";
    }

    protected override void Seed(TreasurePlatformDbContext aContext)
    {
        // This method will be called every time after migrating to the latest version.
        // You can add any seed data here...
    }
}

我也尝试过:

  • 再次运行添加迁移但不会产生任何更改
  • 启用自动迁移并且仍然抱怨

我确信POCO表模型与数据库中的模型匹配。有没有人有任何建议或认为我可以尝试?

1 个答案:

答案 0 :(得分:3)

实体框架在每次迁移中存储模型的快照。听起来您的快照已与当前模型不同步。有两种潜在的解决方法。

方法1

这将创建一个空白的虚拟迁移,其中包含最新模型的快照,但不包含实际代码。不幸的是,这确实意味着您将在项目中添加其他代码。

运行Add-Migration <pick_a_name> –IgnoreChanges

方法2

这将回滚数据库,然后使用更新的快照重新创建迁移。

仅当您尚未将迁移推送到Git或更新任何其他数据库时,才可以执行此操作。否则,任何其他更新的数据库也需要从该过程的步骤1的上一次迁移回滚到第二个数据库。

  1. Update-Database –TargetMigration <second_last_migration>
  2. Add-Migration <full_name_including_timestamp_of_last_migration>

    您需要包括时间戳记,以便迁移知道您要 编辑现有迁移,而不是搭建新迁移。 这将更新上一次迁移的元数据以匹配 当前模型。

  3. Update-Database

来源https://docs.microsoft.com/en-gb/ef/ef6/modeling/code-first/migrations/teams#resolving-the-merge-conflict