在 C# 中回滚 Entity Framework 迁移

Roll back Entity Framework migrations in C#

现在我有一个使用 Entity Framework 与数据库交互的服务。当它启动时,它使用 MigrateDatabaseToLatestVersion<Context, Configuration> 初始化数据库并且运行良好。

情况是这样的,我们想要达到这样一种程度,即我们拥有 active/staging 个环境,但有一个例外:两者都与同一个数据库通信(我无法控制这一点)。

所以,现在,当我部署到暂存区时,我将服务部署为关闭状态。当我们将暂存与生产切换时,我关闭生产服务,启动暂存服务并根据需要向前迁移数据库。这很有效,我们在多个预生产环境中这样做。如果出现问题(只发生过一次),我们必须手动 运行 Update-Database '[previous migration name]' 然后将所有内容切换回之前的服务器。

我想以与向前迁移相同的方式自动向后迁移。也就是说,如果服务启动并发现其架构落后 1 个版本,并且最近的迁移发生在最近 x 天内,它将自动回滚架构并接受任何数据丢失。

我只是不知道该怎么做。

您可以使用 DbMigrator class. You can look at the __MigrationHistory table before your migration code starts running to see what migration to roll back to. Use DbMigrator.Update(string) 指定特定的迁移到 "update" 来完成此操作(您将回滚,因为您指定了之前的迁移)。