c# - EF迁移工具如何恢复数据库

标签 c# entity-framework entity-framework-migrations

我弄了个数据库,不小心把__MigrationHistory表给删了。 现在程序抛出错误,我不能丢失所有数据。 反正有恢复我删除的表吗? 我会丢失所有数据库吗?

我手动添加了 __MigrationHistory,现在这是错误:

Additional information: 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

最佳答案

您可以“重置”项目中的迁移状态。您实质上将创建一个迁移状态,其中 Entity Framework 认为您的数据库的当前状态是“第一次”迁移。但是请注意,这将限制您回滚到具有较早迁移状态的应用程序的先前版本的能力。

  1. 从项目的迁移文件夹中删除现有迁移。
  2. 删除数据库中的 __MigrationHistory 表(已完成)。
  3. 在程序包管理器控制台中运行以下命令:add-migration Reset。因为 migrations 文件夹不包含任何以前的迁移,Reset 迁移将是模型当前状态的完整脚本。 重要验证此Up 方法是否与当前数据库表状态完全匹配。
  4. Reset 迁移中,注释掉Up 方法中的所有内容。我们不想运行 Up 方法,因为数据库应该已经匹配了。
  5. 运行更新数据库命令。这将创建一个新的 __MigrationHistory 表并在表中创建一个新行,表示数据库正在匹配此 Reset 迁移步骤。但是,它不会对数据库进行任何更改,因为 Up 方法是空的。
  6. (可选) 移除 Reset 迁移中 Up 方法周围的注释,以便新数据库可以针对这一点编写脚本。

关于c# - EF迁移工具如何恢复数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29977907/

相关文章:

c# - VS 2010 : unable to unit test

c# - 设置触发从父模板 (WPF) 传递下来的 'self' 属性

entity-framework - 在 Windows Azure 上将 SQL Server CE 4.0 与 Entity Framework 结合使用

asp.net-mvc - 如何在其中配置与主键的多对多关系

c# - migrate.exe 无法加载 Entity Framework

c# - 如果它 = 0 c#,则跳过 for 循环中的值

c# - 如何从数组中查找字符串(前三个字符)的索引

c# - 如何获取实体模型连接字符串?

c# - Entity Framework 多个结果集、Azure 连接弹性和命令拦截

C# EF Code First 播种数据 - 不断添加(而不是更新)