我有一个Web应用程序,可以安装在客户的计算机上以供内部使用。我使用C#MVC5和代码优先的Entity Framework。我使用了自动迁移= true,但是我停止了并将其设置为false。我将其安装在生产环境(发行版)上,带有部署包(没有Visual Studio)。

我有一个使用该应用程序的客户-版本1。现在我想升级到版本2。我想启用该应用程序的数据库的升级(在生产文件中,通过软件包安装CMD),但是可以将降级如果有任何问题,请数据库-但不删除现有行。

例如-如果我有一个表“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");
        }
    }

现在,我在现有版本上安装了该应用程序的新版本,并且运行良好-添加了新列,并且可以使用新代码。我添加了一些项目(行)。

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

最佳答案

this article中,说明了如何创建从一种迁移迁移到另一种迁移的脚本-升级或降级。
所以我在软件包管理器控制台中运行-
Update-Database -Script -TargetMigration: MyMigration1
并获得了SQL脚本。

我需要对其进行一些修复,然后才在生产数据库中运行它以降级数据库。

关于c# - 在生产环境中以代码优先的方式降级(回滚)数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31646488/

10-11 18:21