【发布时间】: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