[英]How to restore database EF migration tools
我有一个数据库,但不小心删除了__MigrationHistory表。 现在程序抛出错误,我不能丢失所有数据。 反正有还原我删除的表吗? 我会丢失所有数据库吗?
我手动添加了__MigrationHistory,现在出现错误:
附加信息:由于存在未决的更改并且自动迁移被禁用,因此无法更新数据库以匹配当前模型。 将待处理的模型更改写到基于代码的迁移中,或者启用自动迁移。 将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移
您可以“重置”项目中的迁移状态。 本质上,您将创建一个迁移状态,其中Entity Framework认为数据库的当前状态是“首次”迁移。 但是请注意,这将限制您以较早的迁移状态回滚到应用程序的早期版本的能力。
add-migration Reset
。 由于迁移文件夹不包含任何先前的迁移,因此“ Reset
迁移将是模型当前状态的完整脚本。 重要说明验证此Up
方法与当前数据库表状态完全匹配。 Reset
迁移中,注释掉Up
方法中的所有内容。 我们不想运行Up
方法,因为数据库应该已经与此匹配。 update-database
命令。 这将创建一个新的__MigrationHistory
表,并在该表中创建一个新行,指示数据库正在与此Reset
迁移步骤匹配。 但是,由于Up
方法为空,因此不会对数据库进行任何更改。 Reset
迁移中删除Up
方法周围的注释,以便可以在此时编写新数据库的脚本。 如果您想保留迁移历史记录
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
而不尝试执行任何其他操作 将您的脚本指向另一个空数据库。 运行所有迁移。 将表和数据从__MigrationHistory
复制到生产数据库中。
要还原所有版本的__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表(已为您还原)的所有版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.