我有一个使用Xamarin Forms和Visual Studio构建的跨平台移动应用程序,它使用Azure移动应用程序表api来获取其数据。我注意到后端似乎运行了额外的增量同步查询,该查询检查updatedAt
列的时间戳。
有没有人知道在Azure上的node.js
后端内生成查询的位置(或者哪个文件包含它),或者更确切地说,我如何删除它?这是我们不需要的条件,因为它会在应用listview
中生成虚假数据,这会使所有内容都显示为错误。
澄清node.js
后端移动应用是使用移动应用配置(https://blog.xamarin.com/getting-started-azure-mobile-apps-easy-tables/)内的Easy Tables
在Azure上自动生成的。您只需添加表格的名称,它就会为您添加version
,deleted
,updatedAt
和createdAt
列。
这是一个奇怪的,但我觉得我的数据完全失控,我制作的应用程序只是准备好,所以最终用户永远不会删除或更新任何内容。
由于
答案 0 :(得分:2)
有没有人知道在Azure上的node.js后端内生成查询的位置(或者哪个文件包含它),或者更确切地说,我如何删除它?
当您使用非空查询ID调用PullAsync
时,会添加其他查询。正如official document有关增量同步的说明:
pull操作的第一个参数是仅在客户端上使用的查询名称。 如果使用非空查询名称,Azure Mobile SDK将执行增量同步。每次pull操作返回一组结果时,该结果集中的最新updatedAt时间戳存储在SDK本地系统表中。后续拉取操作仅检索该时间戳之后的记录。
要根据updatedAt
列停用其他查询,您可以将null作为查询ID 传递。在这种情况下,通过PullAsync
在每次通话时检索所有记录,如下所示:
await todoTable.PullAsync(null, todoTable.CreateQuery().Where(t => t.UserId == "<userid>"));
这是我们不需要的条件,因为它会在应用列表视图中生成虚假数据,这会使一切看起来都不正确。
根据我的理解,增量同步用于优化将服务器数据提取到您的设备中。以下是一些注意事项,您可以查看您的应用程序:
由于Azure移动客户端SDK在updatedAt
字段上添加了自己的排序,因此您无法使用具有自己的orderBy
子句的拉取查询。
查询名称可以是您选择的任何字符串,但对于您应用中的每个逻辑查询,它必须是唯一的。否则,不同的拉取操作可能会覆盖相同的增量同步时间戳,并且您的查询可能会返回不正确的结果。
有关详细信息,请参阅Offline Data Sync in Azure Mobile Apps。
此外,对于具有非空查询ID的PullAsync
,在成功检索数据并更新到本地数据存储之后,客户端SDK将使用最新{更新/插入__config
表来自拉取结果的{1}}时间戳以及SQLite数据库的updatedAt
等于id
,如下所示: