c# - Azure 移动服务 - Entity Framework 代码首先删除并创建数据库不起作用

标签 c# entity-framework azure ef-code-first azure-mobile-services

问题: 更改代码优先移动服务项目中的模型,然后发布到 Azure 会导致以下错误:

System.Data.SqlClient.SqlException (0x80131904): 无法打开登录请求的数据库“master”。登录失败。 用户“xxxxxxxxxxxxxxxxxx”登录失败。

重现步骤:

  • Visual Studio Community 2015 新项目 -> Web 应用程序 -> 移动设备 服务
  • 直接发布到 Azure(创建新的移动服务 - 为数据库选择最便宜的层)
  • 在 Fiddler 中将 GET 发送至 http://whatever.azure-mobile.net/Tables/todoitem
  • 收到 200 OK,其中有 2 个项目由默认项目植入数据库
  • 对模型进行一些小的更改(例如,将以下内容添加到 ToDoItem 类中) 公共(public)字符串已更改 { get;放; }
  • 将更改发布到 Azure
  • 在 Fiddler 中将 GET 发送至 http://whatever.azure-mobile.net/Tables/todoitem
  • 这次收到了 500 内部服务器错误,并且我在开始时引用的错误在 Azure 的移动服务日志中出现了两次

我已经检查过,数据库在没有更改模型的情况下仍然存在,因此我认为 Azure 由于某种原因无法删除它。

在默认的移动服务项目中,在 WebApiConfig 类中,数据库初始值设定项设置为继承 DropCreateDatabaseIfModelChanges 的类型。那么 Azure 不应该删除数据库并重新创建它吗?我在我的自定义项目中遇到了这个问题,因此使用默认移动服务尝试了此测试并能够重现它,至少这个默认网站不应该在盒子外工作吗?

我需要做什么才能允许 Azure 删除数据库?错误消息表明它无法登录,但我们已经证明它可以登录,因为在首次发布服务时,MobileServiceInitializer 类中的 Seed 方法肯定被调用了(因为我们能够返回 2 个 ToDoItems)从 fiddler 发送的第一个 GET 请求)。

有什么想法吗?任何帮助将不胜感激,谢谢。

最佳答案

提交后立即找到答案,典型!

Azure 使用的数据库用户没有删除数据库的权限,因此您需要将使用的初始值设定项类型从 DropCreateDatabaseIfModelChanges 更改为 ClearDatabaseSchemaIfModelChanges。这可以在每次部署时很好地更新架构!

关于c# - Azure 移动服务 - Entity Framework 代码首先删除并创建数据库不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34821147/

相关文章:

performance - HDInsight Invoke-Hive 性能

c# - 两幅图像之间的差异

c# - 多字段搜索

sql - 对于 Entity Framework ,对于 "TOP 1"使用 .First() 还是 .Take(1) 更好?

Azure Multi-Tenancy 应用程序未获取具有新定义范围的 token

azure - 如何通过 RDP 连接到负载平衡的虚拟机?

C#:为什么 .ToString() 将文本更快地附加到转换为字符串的 int 中?

c# - 我应该如何向 "pause"程序向用户显示提示?

c# - Where 子句中的 LINQ 子查询在 LINQPad 中返回错误

c# - 如何将存储过程结果映射到自定义类?