【问题标题】:How to trigger soft delete?如何触发软删除?
【发布时间】:2015-11-07 03:48:03
【问题描述】:

我刚刚开始使用 Azure 移动服务,我不确定我是否了解软删除的工作原理。

我正在开发负责填充 Azure 移动数据库的 Windows 控制台可执行文件,该数据库使用移动服务同步与 iOS 应用程序同步。它使用实体框架连接到数据库。

我已插入记录并更新记录,并让它们毫无问题地显示在移动设备上。但是当我删除记录时,它们就消失了。

我希望这些表有一个触发器来设置 __deleted 标志,以便从 iOS 应用程序中删除删除记录。但这并没有发生。

那么,我应该如何删除记录?

执行正常删除的过程是否正确,我需要弄清楚为什么触发器没有运行?

还是我应该自己设置 __deleted 标志?

或者还有其他完全不同的事情,我应该做什么?

========= 附加评论 =========

如果我理解这一点,如果我在 azure 数据库中的记录上设置 __delete 标志,同步过程将删除移动本地数据库中的匹配记录。

同步完成后会删除记录吗?

或者有什么方法可以让我知道同步已经完成,并且可以安全地删除记录?

或者我应该让删除记录累积?

【问题讨论】:

  • 我已经设置了_deleted = true,并且在我的数据库中它被设置为true并且记录没有被删除,但是当我将我的iOS设备与服务同步时,我的设备中仍然存在记录,我在这里缺少什么?

标签: azure azure-mobile-services


【解决方案1】:

为了在直接访问数据库时将记录标记为已删除,您需要自己设置__deleted标志。有一个触发器会将 __updatedAt 设置为设置 __deleted 的时间。这样,当您的移动应用查询更新时,它会看到记录已被删除。

只有当您通过移动服务 REST API 访问数据时,它才会将 HTTP DELETE 转换为设置 __deleted。

编辑以添加对 cme​​ts 的响应

是的,当移动设备同步带有 __deleted 集的记录时,它会将记录从设备上删除。

您保留已删除记录的时间取决于您预期的记录数量、共享这些记录的设备数量以及您可能对保留记录的其他业务要求。 Adrian 链接到的文章有示例调度程序,用于在软删除后 30 天内删除记录。

本文还建议您让移动应用程序定期从服务器清除并重新下载整个数据集,以确保它不会被已在服务器上永久删除的挥之不去的记录卡住(例如在设备上)与软删除期(本例中为 30 天)相比,使用频率非常低)。

【讨论】:

  • 您能看一下问题中的其他 cmets 吗?
  • @EricHedstrom 我已经设置了_deleted = true,并且在我的数据库中它已设置为true并且记录没有被删除,但是当我将我的iOS设备与服务同步时,记录仍然存在我的设备,我在这里缺少什么?
【解决方案2】:

在功能上,Azure 移动服务和 Azure 移动应用中的软删除是相同的。唯一的区别是列名。您可以在此处阅读有关 Azure 移动服务中的软删除的文档:https://azure.microsoft.com/en-us/documentation/articles/mobile-services-using-soft-delete/

软删除是一项后端功能,因此您无需在客户端中执行任何操作即可启用它。不过,您确实必须更改后端中的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多