DeleteItemAsync 不返回被删除的项目

时间:2021-06-07 21:17:34

标签: azure-cosmosdb

Container.DeleteItemAsync 返回一个包含 Resource 属性的 ItemResponse<T>。这意味着调用将返回实际删除的文档。

但是 Resource 属性始终为 null 并且状态设置为 NoContent,因此该调用似乎永远不会返回实际删除的文档。当它从不返回类型的实例时,为什么会返回类型化的响应。 this MS blog 还描述了如何在删除文档时明确禁用响应。这也意味着应该删除该项目。

我已经检查了数据库,但该文档实际上正在被删除。尝试删除不存在的文档会导致 NotFound 状态并引发异常。

我也尝试过设置 EnableContentResponseOnWrite = true,但这没有任何作用。我尝试了 Microsoft.Azure.Cosmos v3.14 和 v3.19。两者都有相同的结果...

1 个答案:

答案 0 :(得分:2)

DeleteItemAsync 返回类型有点误导,因为 ItemResponse<T> 建议使用已删除项目填充 T 但实际上为空。

也许更清晰的方法是使用 DeleteItemStreamAsync 并检查响应代码,如下所示:

using ResponseMessage response = await container.DeleteItemStreamAsync(itemId, new(partitionKey), options);
if (response.StatusCode == HttpStatusCode.NoContent)
{
    // Success
}
else
{
    // Failed
}

现在您避免了抛出异常的开销,并且代码不会误导内容为非空。