如何从我的 Azure 移动应用后端删除生成的查询?

How do I remove the generated query from my Azure Mobile App backend?

我有一个使用 Xamarin Forms 和 Visual Studio 构建的跨平台移动应用程序,它使用 Azure 移动应用程序 table api 来获取其数据。我注意到后端似乎 运行 一个额外的增量同步查询,它检查 updatedAt 列时间戳。

有谁知道在 Azure 的 node.js 后端内生成查询的位置(或保存它的文件),或者更确切地说,我如何删除它?这是我们不需要的条件,因为它会在应用程序中生成幻影数据 listview,这使得一切看起来都不正确。

澄清 node.js 后端移动应用程序是在移动应用程序配置 (https://blog.xamarin.com/getting-started-azure-mobile-apps-easy-tables/) 中使用 Easy Tables 在 Azure 上自动生成的。您只需添加 table 的名称,它就会为您将 versiondeletedupdatedAtcreatedAt 列添加到 table .

这很奇怪,但我觉得我的数据完全失控了,我制作的应用程序只是准备就绪,所以最终用户永远不会删除或更新任何东西。

谢谢

Does anyone know where the query is generated (or what file holds it) within the node.js backend on Azure or rather, how I can remove it?

当您使用非空查询 ID 调用 PullAsync 时,会添加附加查询。正如 official document 所述 增量同步 :

The first parameter to the pull operation is a query name that is used only on the client. If you use a non-null query name, the Azure Mobile SDK performs an incremental sync. Each time a pull operation returns a set of results, the latest updatedAt timestamp from that result set is stored in the SDK local system tables. Subsequent pull operations retrieve only records after that timestamp.

要禁用基于 updatedAt 列的附加查询,您可以将 null 作为 查询 ID 传递。在这种情况下,每次通过 PullAsync 调用时都会检索所有记录,如下所示:

await todoTable.PullAsync(null, todoTable.CreateQuery().Where(t => t.UserId == "<userid>"));

It's a condition that we don't need as it's generating ghost data in the apps listview which is making everything appear as incorrect.

据我了解,增量同步用于优化将服务器数据拉入您的设备。这里有一些注意事项,您可以在您的应用程序中查看:

  • 由于 Azure 移动客户端 SDK 在 updatedAt 字段上添加了自己的排序,因此您不能使用具有自己的 orderBy 子句的拉取查询。

  • 查询名称可以是您选择的任何字符串,但对于您应用中的每个逻辑查询,它必须是唯一的。否则,不同的拉取操作可能会覆盖相同的增量同步时间戳,并且您的查询可能 return 不正确的结果。

详情请参考Offline Data Sync in Azure Mobile Apps

此外,对于具有非空查询 ID 的 PullAsync,在成功检索数据并更新到您的本地数据存储后,客户端 SDK 将 update/insert __config table 与提取结果的最新 updatedAt 时间戳连同 id 等于 deltaToken|{table-name}|{query-id} 用于您的 SQLite 数据库,如下所示: