Azure移动服务 - 实体框架代码首先删除并创建数据库不起作用

时间:2016-01-15 22:45:32

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

问题: 在代码中更改模型第一个Mobile Services项目,然后发布到Azure会导致以下错误:

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

重现的步骤:

  • Visual Studio Community 2015新项目 - >网络应用程序 - >移动 服务
  • 直接发布到Azure(创建新的移动服务 - 为数据库选择最便宜的层)
  • 将Fiddler的GET发送至http://whatever.azure-mobile.net/Tables/todoitem
  • 使用默认项目
  • 播种到数据库中的2个项目接收200 OK
  • 对模型进行少量更改(例如,将以下内容添加到ToDoItem类中) public string Changed {get;组; }
  • 将更改发布到Azure
  • 将Fiddler的GET发送至http://whatever.azure-mobile.net/Tables/todoitem
  • 这次收到500内部服务器错误,并且在开始时引用的错误在Azure中的移动服务日志中出现两次

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

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

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

有什么想法吗?非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:2)

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

db用户Azure使用不具有删除数据库的权限,因此您需要将DropCreateDatabaseIfModelChanges中使用的初始化程序的类型更改为ClearDatabaseSchemaIfModelChanges。这会在每次部署时很好地更新架构!