C#中回滚Entity Framework迁移

3

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

我们要达到这样一种情况:我们有一个活动/预演环境,唯一的例外是两者都使用相同的数据库(我无法控制此项)。

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

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

我不确定如何实现这一点。

1个回答

3
你可以使用DbMigrator类来完成此操作。在开始运行迁移代码之前,您可以查看__MigrationHistory表以了解要回滚到哪个迁移。使用DbMigrator.Update(string)指定要“更新”的特定迁移(您会回滚,因为您指定了先前的迁移)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接