【问题标题】:Web deploy task failed: data loss might occur when deploying to azureWeb 部署任务失败:部署到 azure 时可能会发生数据丢失
【发布时间】:2016-12-03 17:14:13
【问题描述】:

我有一个首先使用 EF 代码的 MVC 项目,我正在尝试从 Visual Studio 发布到 azure,但我收到错误消息:“Web 部署任务失败:可能会发生数据丢失”。我做了一些重构,包括重命名列,我知道为什么会发生错误,但我想强制迁移,因为我确定我处理了数据丢失:-) 不过我不知道如何跳过数据丢失检查。我发现在 SQL 项目中,您可以在属性中选择取消选中“块潜在数据松散”,但我在 MVC 项目中找不到类似的东西。我试图在不检查数据丢失的情况下包含我自己的架构更新脚本,但 EF 抱怨有待处理的迁移,所以我试图从我的开发数据库中将丢失的条目复制到 _MigrationHistory 表中,但事实证明它不是就这么简单 ;-) 因为我的应用程序仍处于开发阶段,所以我已经重新初始化了 db,但是值得知道如何在“真实”生产环境中处理这种情况:-)

编辑: 经过一些测试,我发现当发布到天蓝色时,现在有选项“更新数据库”,默认情况下会根据本地和天蓝色数据库上的差异生成数据库更新脚本。它与旧的“运行代码优先迁移”不同,因为旧的将 Db 初始化程序更改为 MigrateDatabaseToLatestVersion 并且在应用程序启动时迁移了数据库并在没有应用迁移时运行了种子。另一方面,“更新数据库”过程仅由生成的脚本处理,迁移文件和 MigrationsHistory 表不用于生产,也不用于种子方法。一开始我很困惑,但现在更新脚本可以更好地控制数据库更改似乎是合乎逻辑的,您始终可以修改脚本,此外,将新代码移动到 azure 的发布过程只有在数据库更新成功后才会执行。

【问题讨论】:

    标签: asp.net-mvc entity-framework azure


    【解决方案1】:

    这是一个名为 AutomaticMigrationDataLossAllowed 的选项,将其设置为 true。并运行 Update-Database -Force。应该这样做。

    【讨论】:

    • 我已经尝试过AutomaticMigrationDataLossAllowed,但我依赖于MigrateDatabaseToLatestVersion 初始化程序,它没有考虑到该标志(在我的测试中)。认为使用 -Force 从包管理器控制台迁移可以解决问题。我现在没有什么要测试的,我已经将更新方案更改为“更新数据库”脚本(编辑中的更多信息)但我认为这个答案可以被接受:-)
    猜你喜欢
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多