在生产环境中使用代码优先降级(回滚)数据库

本文关键字:降级 回滚 数据库 生产环境 代码 | 更新日期: 2023-09-27 18:05:04

我在客户的电脑上安装了一个web应用程序,供他们内部使用。我使用c# MVC5和代码优先实体框架。我使用自动迁移=true,但我停止并将其设置为false。我将它安装在生产环境(发布版)上-使用部署包(没有Visual Studio)。

我有一个客户使用版本1的应用程序。现在我想升级到版本2。我想启用升级应用程序的DB(在生产文件中,从包中安装CMD),但要有降级 DB的可能性,如果有任何问题-但不删除现有行。

例如,如果我有一个表"Items",并且Items有Key, Name, Location。在升级时,我添加了一个新列:Email。降级时-新列将被删除。我在Visual Studio上创建了迁移,我得到了以下代码(这只是为了示例-我有更多的迁移):

public partial class AddEmail : DbMigration
    {
        public override void Up()
        {
            AddColumn("dbo.Items", "Email", c => c.String());
        }
        public override void Down()
        {
            DropColumn("dbo.Items", "Email");
        }
    }

现在,我将App的新版本安装在现有版本上,它运行良好-新列被添加,并与新代码一起工作。我添加了一些项目(行)。

现在,我如何重新安装旧版本,以便删除新列?实际上,我想回滚新的迁移—但是我不想丢失新行,只丢失新列。

在生产环境中使用代码优先降级(回滚)数据库

本文解释了如何创建从一个迁移迁移到另一个迁移的脚本—升级或降级。所以我在包管理器控制台运行-

Update-Database -Script -TargetMigration: MyMigration1

并得到SQL脚本。

我需要通过它来修复它,然后我只是在生产数据库上运行它来降级DB。