问题: 更改代码优先移动服务项目中的模型,然后发布到 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/