在生产环境中以代码优先的方式降级(回滚)数据库

Tam*_*arG 9 c# downgrade ef-code-first ef-migrations

我有一个Web应用程序,我安装在客户的计算机上供内部使用.我使用C#MVC5和代码优先实体框架.我使用自动migration = true但我停下来并将其设置为false.我在生产环境(发布)上安装了它 - 使用deploy-package(没有Visual Studio).

我与应用客户-第1版.现在,我想升级到第2版.我希望能够提升应用程序的DB(在生产文件,从包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");
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在,我在现有版本上安装了应用程序的新版本,并且工作正常 - 添加了新列并使用了新代码.我添加了一些项目(行).

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

Tam*_*arG 15

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

Update-Database -Script -TargetMigration: MyMigration1

并获得了SQL脚本.

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