【问题标题】:Staging environment for Azure Mobile Services using Code First Migrations使用 Code First 迁移的 Azure 移动服务暂存环境
【发布时间】:2015-12-23 16:21:00
【问题描述】:

我似乎无法理解 Azure 移动服务的概念,这些服务使用 .NET 后端并启用了 Code First 并启用了迁移。

目前我已经部署了一个“高效”的 AMS 实例,假设它被称为“AMD”。它在 amd.azure-mobile.net 上运行。已使用 Enable-Migrations 和 Add-Migration 创建了数据库结构。现在对于这个高效的实例来说一切都很好,它正在运行并且功能齐全。

现在我想创建一个 INT 实例,为测试等提供一个单独的环境。我想给它起不同的名字,比如“AMDINT”。它应该在 amdint.azure-mobile.net 上运行,并且还应该有一个单独的数据库,以防止在生产中破坏东西。

最初我以为我可以这样完成: 1) 在 amdint.azure-mobile.net 下创建新实例,并使用一个新数据库来配合它 2) 为新创建的名为“INT”的配置创建一个 web.config 转换(主要是将 MS_MobileServiceName 值更改为新名称) 3) 下载新实例的发布配置文件,导入它,使其使用“INT”配置并部署它

显然已经部署了新的位,但是每当我遇到需要访问数据库的端点时,日志中就会生成一个错误,并显示

数据库初始化失败。无法初始化架构“amdint”中的一个或多个对象。请确保数据库连接字符串正确。有关错误的更多详细信息,请参阅内部异常。 ---> System.InvalidOperationException:数据库初始化失败。无法初始化架构“amdint”中的一个或多个对象。请确保数据库连接字符串正确。有关错误的更多详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException: 用户无权执行此操作。

因此,我使用 Azure 用户管理控制台 (AUMC) 查看是否缺少在新服务的配置选项卡中的连接字符串中指定的用户的权限,但该用户存在于该数据库中。我还编辑了用户的权限以包含所有可能的权限,但这并没有改变任何东西。 然后我注意到迁移文件为 Up() 和 Down() 方法指定了一个数据库模式。为了测试,我将这些字符串从“amd.tablename”更改为“amdint.tablename”,并且非常有信心我已经成功了。

但是,这仍然带来了同样的错误。因此,我使用了连接字符串中的数据库用户凭据,并从浏览器的管理控制台打开了数据库编辑器,并看到所有添加的权限都可以很好地编辑数据库架构(出于测试目的创建和删除了一个表)。但是,初始化程序没有创建单个表;数据库是空白的。

但由于我能够进行编辑,我不知何故认为有关权限不足的错误消息具有误导性,或者我看错了地方。

有没有人知道一种方法来完成我想做的事情?很明显,我不想将 Visual Studio 项目用于生产和 INT。

【问题讨论】:

    标签: azure-mobile-services entity-framework-migrations staging


    【解决方案1】:

    我认为您遇到的问题是移动服务创建了一个特殊的架构用户,该用户仅有权访问该架构中的表。此架构与您的移动服务同名。因此,即使两个数据库位于同一数据库服务器上,DEV 移动服务的连接字符串也不适用于 PROD,反之亦然。

    以下是一些使您的设置更容易的建议:

    1. 在 Azure 门户中,移动服务不允许修改它为您创建的连接字符串,即 MS_TableConnectionString。我建议在您的情况下,您使用不同的密钥创建一个新的连接字符串,并将其用于您的每个服务,例如AMD_TableConnectionString。确保对于每个服务,数据库用户都可以访问每个架构(稍后会详细介绍)。

    2. 要使用新的连接字符串,请更改 DbContext 类中的超级构造函数调用,例如,base("name=AMD_TableConnectionString")

    3. 使用 web.config 和/或 Azure 门户中的应用程序设置 MS_MobileServiceName 为您的服务设置架构。这由移动服务实体框架初始化程序使用。

      注意:如果您已经为 DEV 和 PROD 使用单独的数据库,则可以选择为 DEV 和 PROD 实例使用相同的架构名称,这可能会使测试和设置更容易。

      无论哪种方式,连接字符串中的数据库用户都必须对您在 MS_MobileServiceName 中指定的任何架构名称具有完全权限。

    4. (您可能使这部分工作正常。)确保移动服务 SQL 生成器已运行。如果您设置实体框架数据库初始化程序,它将自动运行,但有些人喜欢通过数据库迁移完成所有数据库更改。在这种情况下,请在此处遵循本教程:https://azure.microsoft.com/en-us/documentation/articles/mobile-services-dotnet-backend-how-to-use-code-first-migrations/#using-code-first-migrations-without-an-initializer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 2015-04-01
      • 1970-01-01
      • 2015-01-24
      • 1970-01-01
      相关资源
      最近更新 更多