我有一个数据库,不小心删除了__MigrationHistory表。 现在程序抛出错误,我不能丢失所有数据。 反正有没有恢复我删除的表? 我会丢失所有数据库吗?
我手动添加了__MigrationHistory,现在这是错误:
其他信息:无法更新数据库以匹配当前 模型,因为有待更改和自动迁移 禁用。将挂起的模型更改写入基于代码的更改 迁移或启用自动迁移。组 DbMigrationsConfiguration.AutomaticMigrationsEnabled为true以启用 自动迁移
答案 0 :(得分:5)
你可以重置"项目中的迁移状态。您将基本上创建一个迁移状态,其中Entity Framework认为数据库的当前状态是" first"移民。但请注意,这将限制您使用较早的迁移状态回滚到以前版本的应用程序的能力。
add-migration Reset
。由于迁移文件夹不包含任何先前的迁移,因此Reset
迁移将是当前状态下模型的完整脚本。 重要验证此Up
方法是否与当前数据库表状态完全匹配。Reset
迁移中,注释掉Up
方法中的所有内容。我们不想运行Up
方法,因为数据库应该已经匹配。update-database
命令。这将创建一个新的__MigrationHistory
表并在表中创建一个新行,表明该数据库与此Reset
迁移步骤匹配。但是,它不会对数据库进行任何更改,因为Up
方法为空。Up
迁移中Reset
方法的注释,以便可以将新数据库编写到此点答案 1 :(得分:2)
如果您想维护迁移历史记录
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) );
update-database
命令:它将重新填充__MigrationHistory
而不尝试其他任何操作答案 2 :(得分:1)
将脚本指向另一个空数据库。运行所有迁移。将表格和数据从__MigrationHistory
复制到您的生产数据库中。
答案 3 :(得分:0)
要还原所有版本的__MigrationHistory表(从migrations文件夹中),请执行以下步骤
update-database -script
这将产生sql脚本以拖放并创建表,程序包括迁移表 在上面的脚本中,删除与所有其他表,过程相关的所有sql命令。 仅保留与__MigrationHistory表相关的sql命令。
删除所有与迁移表无关的sql命令后,它包含迁移表的创建和一些插入语句。看起来像
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 ([MigrationId], [ContextKey]))
现在在您的sql服务器中运行此脚本,并将创建(为您恢复)__ MigrationHistory表的所有版本。