Azure移动服务:使用REST API进行软删除记录?

时间:2015-07-24 08:47:51

标签: rest azure-mobile-services

我在表格(as described here)上启用了软删除功能。 如何使用REST API软删除/标记已删除的行?

Rest API告诉您如何在query statement中包含已删除的记录,但没有说明如何将其标记为已删除。

我尝试发送更新查询,但收到了:

{
  "code":400,
  "error":"Error: The property '__deleted' can not be set. Properties that begin with a '__' are considered system properties."
}

我也尝试使用DELETE方法,但实际上删除了记录。

任何帮助表示赞赏!

编辑:

@phillipv要求提供更多信息:我使用的是Swift和Alamofire框架。但即使我使用curl这样:

curl -i \
-X DELETE \
-b "ARRAffinity=XXXXX" \
-H "x-zumo-auth: XXXXXXXX" \
-H "x-zumo-application: XXXXXXX" \
"https://myproject.azure-mobile.net/tables/myTable/BB65C071-6425-44BA-BB63-EBF4D9BF37A1"

记录被(硬)删除。

我是否在现有表格(2014年初创建)上启用了软删除功能?对于没有__deleted列的所有表格,都有一个Enable soft delete按钮。在相关表格中没有按钮,因为我启用了该功能,在列视图中列出了__deleted列。

EDIT2:

我刚刚创建了一个新的测试表,用一些示例数据填充它并执行完全相同的DELETE调用,并且该记录仅标记为已删除。

好的,这很好,并且正如@phillipv在评论中说的那样。但现在出现了一个新问题:

如何使用REST API硬删除记录?

1 个答案:

答案 0 :(得分:1)

当您启用"软删除"时,该行中的"已删除" 字段将设置为" true" 并且不再从移动服务返回记录(而是永久删除记录)。如果您未启用"软删除",则记录将从数据库中永久删除。此软删除功能是限制您的客户端应用程序完全删除/刷新任何记录/表。跟踪将位于"已删除" 列中。 : - )

并且您不需要明确指定" _Deleted" 列。如果检查API控制器,则可以看到删除操作由

处理
    public Task DeleteYourTableName(string id)
    {
      return DeleteAsync(id);
    }

所以,当你传递一个' Id'要删除,上述操作知道该请求是删除提供了Id的记录。如果启用了软删除功能,则会删除'已删除' field设置为true,否则删除整行。这是由移动服务框架内部处理的。