【问题标题】:Deploy Database Fails for Azure Mobile App为 Azure 移动应用程序部署数据库失败
【发布时间】:2017-02-09 06:48:06
【问题描述】:

我正在尝试为使用 Xamarin Forms 和 Azure 服务构建的新移动应用程序构建 Web 服务/后端。我一直在关注这个tutorial

在我进入“将项目部署到 Azure 应用服务”部分之前,一切都很好,我遇到了 2 个相关问题。我自己的 DataObjects 和作为示例给出的标准“ToDoList”应用程序也遇到了同样的问题。

  1. 当我第一次发布时,我在发布向导的“设置”选项卡上选择“更新数据库”,以便将我的新 DataObjects/Schema 推送到我的新数据库。然后,我点击发布,我收到一条错误消息System.Data.SqlClient.SqlException (0x80131904): Cannot attach the file '{LocalFilePath}\App_Data\{databaseName}.mdf' as database '{databaseName}'. 我注意到指定的“App_Data”文件夹中没有任何内容,我是否需要在发布到应用程序之前做一些事情来构建 .mdf服务?
  2. 出现此错误后,我尝试重新发布数据库,发布向导有2个不同之处。首先,我不再有“更新数据库”选项,我只有“设置”选项卡上的“执行代码优先迁移”选项,并且是灰色的。其次,“预览”选项卡显示“未选择要发布的数据库”

我尝试通过三种不同的方式通过应用服务发布数据库,每种方式都给了我上述完全相同的场景,所以我认为我只是缺少一些明显的东西,因为我是 Azure 的新手和移动应用程序开发。

  1. 通过 Azure 门户创建移动应用后端 + 服务 + 数据库,然后从 Azure 门户部署“快速入门”项目。
  2. 遵循与上述类似的教程,但该教程专门用于发布默认插入的 ToDoList 数据库模式。这是我关注的tutorial
  3. 按照上面的教程,但使用我自己的自定义 DataObjects 而不是教程中描述的那些。

我已经阅读了有关使“执行代码优先迁移”可用的方法,但我还没有找到任何实际允许我部署数据库的方法,因为它一直在说“没有选择数据库发布”,并且在初始失败后我无法显示“更新数据库”选项。我有什么明显的遗漏吗?

【问题讨论】:

    标签: azure mobile azure-mobile-services


    【解决方案1】:

    当我第一次发布时,我在发布向导的“设置”选项卡上选择“更新数据库”,以便将我的新 DataObjects/Schema 推送到我的新数据库。然后,我点击发布,我收到一条错误消息 System.Data.SqlClient.SqlException (0x80131904): Cannot attach the file '{LocalFilePath}\App_Data{databaseName}.mdf' as database '{databaseName}' 。我注意到指定的“App_Data”文件夹中没有任何内容,在发布到应用服务之前我是否需要做一些事情来构建 .mdf?

    正如官方document 在发布 Web 向导中提到的更新数据库,如下所示:

    您在发布 Web 向导中选中标记为更新数据库的复选框。 此复选框适用于应用程序在不使用实体框架代码优先上下文类的情况下访问的 SQL Server 数据库。

    如果在部署应用之前未创建源本地数据库,则会收到如下错误:

    有关更多详细信息,您可以参考document 中的 dbDacFx Web 部署提供程序部分。

    出现此错误后,我尝试重新发布数据库,发布向导有2个不同之处。首先,我不再有“更新数据库”选项,我只有“设置”选项卡上的“执行代码优先迁移”选项,并且是灰色的。其次,预览选项卡显示“没有选择要发布的数据库”

    执行代码优先迁移(在应用程序启动时运行)针对应用程序使用实体框架代码优先上下文类访问的数据库显示。

    当您选择此选项时,部署过程会自动在目标服务器上配置应用程序 Web.config 文件,以便 Code First 使用 MigrateDatabaseToLatestVersion 初始化程序类。

    如果您在包管理器控制台中运行Enable-Migrations 命令,您可以选中此复选框。有关更多详细信息,您可以参考此document 中的Entity Framework Code First 迁移部分。

    作为一种简单的方法,您可以利用 Azure 门户中的“QuickStart”项目首先通过 EF 代码迁移您的数据库。部署项目时,在 VS 发布 Web 向导的“设置 > 数据库”下使用目标数据库(例如 Azure 数据库)连接字符串更新本地连接字符串,如下所示:

    【讨论】:

    • 非常感谢您的建议,我回家试试看!
    • 嗨,布鲁斯,是的,我们能够弄清楚如何部署数据库。我仍在处理种子数据上的一些错误(因为我将对象列表附加到另一个对象,所以我遇到了一些外键问题)——但感谢您提供的信息,它能够帮助我获得数据库已部署!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 2020-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    相关资源
    最近更新 更多