Asp.net mvc 如何在部署的asp mvc网站上更新数据库模型而不丢失数据

Asp.net mvc 如何在部署的asp mvc网站上更新数据库模型而不丢失数据,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,在部署asp mvc网站后,如何在不丢失任何先前数据的情况下更新该网站中的数据库模式(模型) 我刚刚在azure网站上部署了一个MVC5网站。一切都很好,所以我开始上传一些数据。然后我想出了一些我需要更新的东西。这很简单,我只想对它的数据库模式做一点修改 在本地机器(开发阶段),我们可以只运行 Update-Database 在包管理器控制台上。问题是?如何对已发布的版本执行相同的想法?我没有尝试重新发布我的解决方案,担心数据会丢失(数据太多,无法重新上传) 我首先使用entity frame

在部署asp mvc网站后,如何在不丢失任何先前数据的情况下更新该网站中的数据库模式(模型)

我刚刚在azure网站上部署了一个MVC5网站。一切都很好,所以我开始上传一些数据。然后我想出了一些我需要更新的东西。这很简单,我只想对它的数据库模式做一点修改

在本地机器(开发阶段),我们可以只运行

Update-Database
在包管理器控制台上。问题是?如何对已发布的版本执行相同的想法?我没有尝试重新发布我的解决方案,担心数据会丢失(数据太多,无法重新上传)

我首先使用entity framework 6代码并启用了迁移:

public Configuration()
    {
        AutomaticMigrationsEnabled = true;
    }
我只想在其中一个数据行中添加一个属性:

public class MyViewModel
{
    public string Name {get;set; }

    public string Content { get; set; }
}
致:


谢谢。

欢迎来到生产环境中的代码优先迁移这一可怕的场景!需要注意的一点是,如果启用自动迁移,则永远无法恢复迁移。相反,建议您不要执行自动迁移。相反,从控制台运行
添加迁移“migrationName”
。这将使用up和down方法将迁移添加到migrations文件夹中,您可以在其中查看与该迁移相关的所有更改。通过运行updatedatabase-script,您可以看到将针对数据库运行什么样的sql。这些更改实际上不会运行,但您可以看到生成了什么sql。是关于代码优先迁移和部署以及web.config文件中所有必要更改的良好演练


我认为,在使用自动迁移时,默认情况下会关闭允许数据丢失功能

除其他解决方案外,您还可以使用此

Database.SetInitializer(new MigrateDatabaseToLatestVersion<BlogContext, Configuration>());
Database.SetInitializer(新的MigrateDatabaseToLatestVersion());
其中,
BlogContext
是您的上下文,
Configuration
是首先由代码生成的配置类(从
dbmigtorinsconfiguration
降序而来)

当然,您必须重新发布应用程序(至少是二进制部分)


还请阅读,特别是最后几段。

谢谢您的快速回答。不过,我只想再确认一次:如果我使用此设置,部署的网站上的数据库架构将更新,但不会丢失任何数据?我说得对吗?因此,它不会删除数据库,也不会运行seed方法。它将仅使用现有数据库更新模式?对不起,我太偏执了:嘲笑我太偏执了。我建议备份数据库并将其恢复到测试/预编译环境中,并在部署到prod之前测试迁移。Helo先生,我想了解更多关于MigratedatabaseTolatesVersion的信息,正如您所写的,我只是遵循了这一点,但随后发生了外键冲突。我的问题是:假设我在离线开发中有一个虚拟数据,然后我将其部署到azure。在线后,我删除了虚拟数据并开始上传真实数据。然后我想对模式进行更改(只是从int更改为double),所以正如您所说,我使用了migratetolatestversion。数据会怎么样?我离线时的虚拟数据会被传输并导致冲突吗?@Ace我有
AutomaticMigrationsEnabled=false
,如果我添加这行代码
Database.SetInitializer(新的MigrateDatabaseToLatestVersion())到my
Global.asax.cs
会有任何风险吗?
Database.SetInitializer(new MigrateDatabaseToLatestVersion<BlogContext, Configuration>());