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

我有一个数据库,并且不小心删除了__MigrationHistory表。 现在程序会抛出错误,我不能丢失所有的数据。 无论如何恢复我删除的表? 我会丢失我所有的数据库吗?

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

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


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

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

  • 如果你想维护你的迁移历史

  • 如果您同时删除_MigrationHistory的内容和结构,请使用_MigrationHistory创建一个空的_MigrationHistory
  • CREATE TABLE [dbo].[__MigrationHistory] (
        [MigrationId]    NVARCHAR (150)  NOT NULL,
        [ContextKey]     NVARCHAR (300)  NOT NULL,
        [Model]          VARBINARY (MAX) NOT NULL,
        [ProductVersion] NVARCHAR (32)   NOT NULL,
        CONSTRAINT [PK_dbo.__MigrationHistory] PRIMARY KEY CLUSTERED ([MigrationId] ASC, [ContextKey] ASC)
    );
    
  • 注释所有迁移代码文件的Up()方法的内容
  • 运行update-database命令:它会__MigrationHistory而不会尝试执行其他任何操作
  • 取消注释您在迁移代码文件中评论的内容,以便在部署新数据库时创建数据库模型

  • 将您的脚本指向另一个空的数据库。 运行所有的迁移。 将__MigrationHistory表格和数据__MigrationHistory到生产数据库中。

    链接地址: http://www.djcxy.com/p/90253.html

    上一篇: How to restore database EF migration tools

    下一篇: .net