Container.DeleteItemAsync
返回一个包含 Resource
属性的 ItemResponse<T>
。这意味着调用将返回实际删除的文档。
但是 Resource
属性始终为 null
并且状态设置为 NoContent
,因此该调用似乎永远不会返回实际删除的文档。当它从不返回类型的实例时,为什么会返回类型化的响应。 this MS blog 还描述了如何在删除文档时明确禁用响应。这也意味着应该删除该项目。
我已经检查了数据库,但该文档实际上正在被删除。尝试删除不存在的文档会导致 NotFound
状态并引发异常。
我也尝试过设置 EnableContentResponseOnWrite = true
,但这没有任何作用。我尝试了 Microsoft.Azure.Cosmos v3.14 和 v3.19。两者都有相同的结果...
答案 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
}
现在您避免了抛出异常的开销,并且代码不会误导内容为非空。