我正在使用 Azure 移动应用服务。我正在使用软删除和增量同步功能。
我遇到了一个有趣的边缘情况:
- 将新记录插入本地数据库
- 推送
- 记录在后端被删除。可以在客户端模拟,直接使用
client.GetTable<T>().DeleteAsync(foo)
删除即可不是client.GetSyncTable<T>().DeleteAsync(foo)
- 本地数据库现在比远程数据库多了一条记录
- 再次按下
我假设最后一次推送会在远程数据库上重新创建记录,但事实并非如此 - 这是令人惊讶的,非常非常棒,因为它是逻辑结果!
我不明白的是,为什么?客户端如何知道不要推送该孤立记录?
(是因为我从客户端执行了删除吗?所以在生产中,当我们的后端系统删除该记录时,客户端会推送它?)
编辑,抱歉我没有正确解释:
我的意思是我们有后端系统,它可以直接在后端数据库上执行删除(它们不知道也不关心远程客户端)。我在上面提出了第 3 点,只是作为从客户端本身执行此操作的一种“hackish”方式。无论如何,在这种情况下,客户端上都会有一条孤立的记录。当发生这种情况并执行推送时,客户端是否会尝试在后端重新创建该记录 - 因为它不知道后端已删除它?
最佳答案
软删除是客户端知道删除“孤立”记录的方式。换句话说,服务器并没有真正删除该记录,而只是标记了删除标志。进行离线同步的客户端会在拉取操作中获取已删除的记录,并从本地存储中删除这些记录。 (他们通过在请求中添加 __includedDeleted=true 标志来做到这一点。)
如果客户端更改了已删除的记录,并且您正在使用冲突处理(通过在客户端上设置版本字段),则更新将通过常规冲突处理机制被拒绝。
关于c# - Azure 移动应用服务客户端上如何处理孤立记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38523669/