You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Mobile Apps离线同步时删除记录未在其他设备同步的问题

解决Azure Mobile Apps离线同步删除记录不同步的问题

核心原因

离线同步默认仅同步新增/更新的记录,当你在某设备硬删除云端记录后,其他设备的本地离线数据库无法感知该记录已被删除——因为常规拉取操作只会获取有变更(新增或修改)的条目,不会主动对比并移除本地已不存在于云端的记录。

解决方案

1. 启用软删除(推荐方案)

你提到的“软删除选项”并非消失,而是Azure Mobile Apps后端(如ASP.NET Core后端)默认支持该机制,只需通过代码配置实现:

  • 在你的数据实体类中添加软删除标记属性:
    public bool Deleted { get; set; }
    
  • 后端通过EF Core配置全局筛选与默认值:
    modelBuilder.Entity<YourEntity>().Property(e => e.Deleted).HasDefaultValue(false);
    // 自动过滤已标记删除的记录,前端无需额外处理
    modelBuilder.Entity<YourEntity>().HasQueryFilter(e => !e.Deleted);
    

修改后,删除操作不会直接移除云端记录,而是将Deleted字段设为true,拉取同步时会把这个变更同步到其他设备的本地库,你只需在前端界面过滤掉Deleted=true的记录即可。

2. 强制全量同步(应急方案,不推荐高频使用)

若不想使用软删除,可修改拉取逻辑,强制拉取云端所有记录并覆盖本地数据:

// 替换原PullItemsAsync调用,设置同步模式为覆盖现有数据
await _table.PullItemsAsync(
    pullOptions: new PullOptions { SyncMode = SyncMode.OverwriteExisting }
);

这种方式会直接用云端数据覆盖本地库,从而移除已在云端删除的记录,但频繁全量拉取会消耗更多带宽与资源,仅适合小数据量场景。

3. 自定义删除日志同步(复杂场景方案)

在后端新增删除日志表,每次删除操作记录被删条目的ID;前端拉取时额外获取该日志,再手动在本地离线库中删除对应ID的记录。此方案需自定义前后端逻辑,复杂度较高。

关键补充

原示例的RefreshItemsAsync仅完成了本地变更推送与新增/更新记录拉取,未处理云端已删除的条目,因此需要通过上述方案补充同步逻辑。软删除是离线同步场景下处理删除操作的标准方案,既能保证多设备数据一致性,也能避免误删数据的风险。

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:32:34