如何使用EF Core恢复迁移历史记录>>

问题描述 投票:0回答:1

假设我有一个由三个迁移创建的数据库。它们可以在表dbo._EFMigrationsHistory中看到,其内容可能如下所示:

MigrationId                         ProductVersion
20200516181941_InitialMigration     3.1.4
20200517091058_AddedIndexes         3.1.4
20200605115456_IntroducedBreweries  3.1.4

现在,由于某种原因,我失去了所有桌子(或只是部分桌子)。所以桌子突然看起来像这样:

MigrationId                         ProductVersion
20200517091058_AddedIndexes         3.1.4
20200605115456_IntroducedBreweries  3.1.4

然后我进行了新的迁移,因为我更改了数据库中的某些内容

Add-Migration SomethingChanged

这会很好,因为我们现在不在与数据库对话。但是,如果我尝试更新数据库,就像这样

Update-Database

它将失败,因为它试图重新运行InitialMigration(或者至少是我认为的)。因此,常见的错误是无法创建在InitialMigration中创建的表,因为它们已经存在。

在开发过程中,您可以简单地核对数据库和/或迁移,但这不是一种非常可行的生产策略。也可以使用Script-Migration完成,它具有从/到选项,允许这样的操作:

Script-Migration 20200517091058_AddedIndexes 20200605115456_IntroducedBreweries

但是这似乎在Update-Database上不起作用(在documentation中也没有)。

是否有(生产安全的)方法来解决此问题,以使迁移历史不会永远存在?

我能想到的最好的方法是在数据库中手动插入缺少的行,但这似乎有点黑...

假设我有一个由三个迁移创建的数据库。它们可以在表dbo._EFMigrationsHistory中看到,其内容可能如下所示:MigrationId ...

c# entity-framework-core ef-migrations
1个回答
0
投票

问题:您已经对迁移进行了重新整理,并且希望在不删除现有表的情况下进行重置。

© www.soinside.com 2019 - 2024. All rights reserved.