Azure 移动服务到应用服务的混淆
Azure Mobile Service To App Service Confusion
我一直在开发 Azure 移动服务,我已经实现了代码优先迁移,因为数据模型在开发过程中发生了很大变化,我不想丢失我的数据,这是 Azure 中的默认行为每当数据模型更改时,移动服务将删除支持 SQL 数据库 table。
此移动服务尚未投入生产,但我想将其迁移到新的 Azure 应用服务(移动应用),并且我已完成所有必要的调整以使我的 TableControllers 等像我一样工作喜欢他们
显然,在第一次部署到 App Service 时,我不需要担心数据模型的变化,但在某些时候我要改变一些东西。
虽然有很多关于为旧的 Azure 移动服务进行代码优先迁移的帖子,但似乎没有关于新服务的内容。
更令人惊讶的是,在 Azure 门户中,新的应用服务似乎不受 SQL 服务器的支持,因为似乎没有 SQL 服务器实例分配给该服务。
所以我的问题是:
1) SQL 服务器支持新的 Azure 应用服务吗?如果是这样,为什么我无法在 Azure 门户中获取连接详细信息?
2) 如果它由 SQL 服务器支持,我们如何在不丢失数据的情况下进行模型更改。
我在网上搜索了又搜索,但似乎没有直接的答案(只是普遍缺乏信息)
非常感谢
1) 是的。查看连接字符串下的应用程序设置
2) 如果你正在做 Node,那么 ALTER TABLE 就完成了——而不是 drop/create。如果您正在执行 ASP.NET,那么它由 Entity Framework 支持,因此适用标准 EF 规则 - 执行 EF 迁移。您还可以在 App_Start/AzureMobile.cs
(或包含启动逻辑的任何文件名)
中使用此关闭管理表的框架
// Initialize the database with EF Code First
// Database.SetInitializer(new AzureMobileInitializer());
Database.SetInitializer<MyDbContext>(null);
注释掉的行是我原来的初始化程序。未注释的版本是不对数据库进行任何更改的新版本。如果您这样做,您将负责 SQL 更改以更新模型的数据库。
我目前正在 https://shellmonger.com 上做一个“30 天的 ZUMO”博客系列 - 我目前正在报道 Node,但我最终会到达 ASP.NET(可能是五月初)
好的,在 Adrian Hall 的回答的帮助下,我终于弄清楚了。
问题是文档质量差、Visual Studio 中 'new project' 向导不完善以及我认为一切都应该按预期工作的假设的结合。
首先,我在 Visual Studio 中创建了 App Service 移动应用程序,而不是通过 Azure 门户。然后我从 Visual Studio 成功部署了它,没有意识到需要在线完成更多设置。
基本上,默认情况下创建的应用程序服务没有数据库(事后看来,这可能是 Visual Studio 新项目向导中没有要求我提供数据库详细信息的原因)。
您必须在 Azure 门户中手动配置新的数据库连接,您也可以根据需要在其中创建新的 SQL 数据库。
这个问题因我自己的无能而变得更加复杂——我已经将我的客户端代码配置为使用离线同步,所以每当我启动我的客户端应用程序时,我都会看到以前的数据——这让我假设服务器项目必须有一些数据存储。事实上,我的本地 PushAsync 实际上没有做任何事情。
现在我已经正确配置了数据连接,一切似乎都符合 Adrian Halls 的回答 - 这是正确的。
我一直在开发 Azure 移动服务,我已经实现了代码优先迁移,因为数据模型在开发过程中发生了很大变化,我不想丢失我的数据,这是 Azure 中的默认行为每当数据模型更改时,移动服务将删除支持 SQL 数据库 table。
此移动服务尚未投入生产,但我想将其迁移到新的 Azure 应用服务(移动应用),并且我已完成所有必要的调整以使我的 TableControllers 等像我一样工作喜欢他们
显然,在第一次部署到 App Service 时,我不需要担心数据模型的变化,但在某些时候我要改变一些东西。 虽然有很多关于为旧的 Azure 移动服务进行代码优先迁移的帖子,但似乎没有关于新服务的内容。
更令人惊讶的是,在 Azure 门户中,新的应用服务似乎不受 SQL 服务器的支持,因为似乎没有 SQL 服务器实例分配给该服务。
所以我的问题是:
1) SQL 服务器支持新的 Azure 应用服务吗?如果是这样,为什么我无法在 Azure 门户中获取连接详细信息?
2) 如果它由 SQL 服务器支持,我们如何在不丢失数据的情况下进行模型更改。
我在网上搜索了又搜索,但似乎没有直接的答案(只是普遍缺乏信息)
非常感谢
1) 是的。查看连接字符串下的应用程序设置
2) 如果你正在做 Node,那么 ALTER TABLE 就完成了——而不是 drop/create。如果您正在执行 ASP.NET,那么它由 Entity Framework 支持,因此适用标准 EF 规则 - 执行 EF 迁移。您还可以在 App_Start/AzureMobile.cs
(或包含启动逻辑的任何文件名)
// Initialize the database with EF Code First
// Database.SetInitializer(new AzureMobileInitializer());
Database.SetInitializer<MyDbContext>(null);
注释掉的行是我原来的初始化程序。未注释的版本是不对数据库进行任何更改的新版本。如果您这样做,您将负责 SQL 更改以更新模型的数据库。
我目前正在 https://shellmonger.com 上做一个“30 天的 ZUMO”博客系列 - 我目前正在报道 Node,但我最终会到达 ASP.NET(可能是五月初)
好的,在 Adrian Hall 的回答的帮助下,我终于弄清楚了。
问题是文档质量差、Visual Studio 中 'new project' 向导不完善以及我认为一切都应该按预期工作的假设的结合。
首先,我在 Visual Studio 中创建了 App Service 移动应用程序,而不是通过 Azure 门户。然后我从 Visual Studio 成功部署了它,没有意识到需要在线完成更多设置。
基本上,默认情况下创建的应用程序服务没有数据库(事后看来,这可能是 Visual Studio 新项目向导中没有要求我提供数据库详细信息的原因)。
您必须在 Azure 门户中手动配置新的数据库连接,您也可以根据需要在其中创建新的 SQL 数据库。
这个问题因我自己的无能而变得更加复杂——我已经将我的客户端代码配置为使用离线同步,所以每当我启动我的客户端应用程序时,我都会看到以前的数据——这让我假设服务器项目必须有一些数据存储。事实上,我的本地 PushAsync 实际上没有做任何事情。
现在我已经正确配置了数据连接,一切似乎都符合 Adrian Halls 的回答 - 这是正确的。