c# - Azure 移动应用服务客户端上如何处理孤立记录?

标签 c# azure azure-mobile-services

我正在使用 Azure 移动应用服务。我正在使用软删除和增量同步功能。

我遇到了一个有趣的边缘情况:

  1. 将新记录插入本地数据库
  2. 推送
  3. 记录在后端被删除。可以在客户端模拟,直接使用 client.GetTable<T>().DeleteAsync(foo) 删除即可不是client.GetSyncTable<T>().DeleteAsync(foo)
  4. 本地数据库现在比远程数据库多了一条记录
  5. 再次按下

我假设最后一次推送会在远程数据库上重新创建记录,但事实并非如此 - 这是令人惊讶的,非常非常棒,因为它是逻辑结果!

我不明白的是,为什么?客户端如何知道不要推送该孤立记录?

(是因为我从客户端执行了删除吗?所以在生产中,当我们的后端系统删除该记录时,客户端会推送它?)

编辑,抱歉我没有正确解释:
我的意思是我们有后端系统,它可以直接在后端数据库上执行删除(它们不知道也不关心远程客户端)。我在上面提出了第 3 点,只是作为从客户端本身执行此操作的一种“hackish”方式。无论如何,在这种情况下,客户端上都会有一条孤立的记录。当发生这种情况并执行推送时,客户端是否会尝试在后端重新创建该记录 - 因为它不知道后端已删除它?

最佳答案

软删除是客户端知道删除“孤立”记录的方式。换句话说,服务器并没有真正删除该记录,而只是标记了删除标志。进行离线同步的客户端会在拉取操作中获取已删除的记录,并从本地存储中删除这些记录。 (他们通过在请求中添加 __includedDeleted=true 标志来做到这一点。)

如果客户端更改了已删除的记录,并且您正在使用冲突处理(通过在客户端上设置版本字段),则更新将通过常规冲突处理机制被拒绝。

关于c# - Azure 移动应用服务客户端上如何处理孤立记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38523669/

相关文章:

c# - 异步读取进程输出时的延迟

c# - 如何使用数据绑定(bind)在 Canvas 上绘制数据点集合?

c# - 如何拆分 Exception.StackTrace 并仅获取最后一行

postgresql - 将 azure 文件存储与 kubernetes 和 azure 容器服务 (aks) 一起使用 - 权限被拒绝

azure - 如何在没有 NSG 的情况下创建 Azure VM?

Azure 应用服务 - 从表 Controller 更新对象

c# - HiddenField 始终为 NULL,来自 javascript

android - 使用Azure开发网站,然后为其创建原生iOS和Android应用程序,什么是好的数据架构?

azure - 使用 Azure 移动服务,microsoftaccount 错误和 Twitter 不粘

azure - 如何配置 Azure 移动服务的两个实例以使用相同的应用程序 key ?