假设我有一个由三个迁移创建的数据库。它们可以在表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来完成,它有一个from/to选项,允许这样的操作:
Script-Migration 20200517091058_AddedIndexes 20200605115456_IntroducedBreweries但这似乎不适用于Update-Database (在文档中也不适用)。
有什么(生产安全)方法来解决这个问题,这样迁移历史就不会永远中断吗?
我能想到的最好的方法,就是手动在数据库中插入丢失的行,但是这似乎很难理解.
发布于 2020-06-05 17:25:47
问题是:您已经破坏了迁移,并且希望在不删除现有表的情况下重新设置迁移。
问题是:不能用数据库中的现有表重置迁移,因为EF希望从头创建表。
该做什么:
您现在已经重置您的迁移,并可能继续正常迁移。
https://stackoverflow.com/questions/62220711
复制相似问题