我有一个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/