我正在按照以下代码使用DeleteDocumentAsync。
public static void DeleteErrorLog(List<string> LogID, string collectionName)
{
FeedOptions queryOptions = new FeedOptions { EnableCrossPartitionQuery = true };
try
{
//getting resource id for a document with given logid
var db = client.CreateDatabaseQuery().Where(x => x.Id == databaseName).ToList().First();
var coll = client.CreateDocumentCollectionQuery(db.SelfLink).Where(x => x.Id == collectionName).ToList().First();
var docs = client.CreateDocumentQuery(coll.SelfLink, queryOptions).Where(x => x.Id == LogID[0]).AsEnumerable().Single();
var collectionUri = UriFactory.CreateDocumentUri(databaseName, collectionName, docs.ResourceId);
client.DeleteDocumentAsync(collectionUri);
}
catch (Exception) { throw; }
}
每个值都正确填充,我要删除的文档仍然无法删除吗?任何帮助将不胜感激
答案 0 :(得分:1)
您可能缺少用于删除操作的PartitionKey:
var documentUri = UriFactory.CreateDocumentUri(databaseName, collectionName, LogID[0]);
client.DeleteDocumentAsync(documentUri, new RequestOptions(){PartitionKey=new PartitionKey(LogID[0])}).GetAwaiter().GetResult();
此外,如果您已经知道ID(在您的情况下为LogID[0]
),则不需要查询。
答案 1 :(得分:1)
您不等待client.DeleteDocumentAsync
,这意味着您的catch
将不会捕获所创建的Task
中发生的异常-它会自动失败。
我的猜测是由于这个原因,在DeleteDocumentAsync
中引发了一个异常,该异常随后未在预期的位置被捕获。
理想情况下,此方法将被重写为使用async
/ await
,然后您的try
catch
将拾取所有抛出的异常:
public static async Task DeleteErrorLog(List<string> LogID, string collectionName)
{
...
await client.DeleteDocumentAsync(collectionUri);
...
}
您必须确保调用此方法的代码也使用await
。