我正在尝试在我正在创建的 API 中使用 Azure CosmosDB(以前的 DocumentDB)存储库(我对 C# 很陌生)。我已经设法使用 client.CreateDocumentQuery 方法获得所有文档的结果,而无需向其传递 SQL 查询。但是,当我通过 SQL 查询时,程序执行挂起并且控制器以 404 响应。我试图在它周围添加一个 try-catch,但我没有得到任何异常或任何东西。
使用 Microsoft.Azure.DocumentDB.Core 版本 1.9.1。
我尝试了很多东西,其他方法和 LINQ,但没有任何工作。如果你看一下这个示例方法,你能给我一个关于如何正确查询并从文档集合中获取结果的例子吗?我真的很感激!更新:我稍微更新了 SQL。已尝试使用硬编码参数并在其工作的数据资源管理器中对其进行了测试。执行似乎冻结*var feedResponse = await documentQuery.ExecuteNextAsync<JObject>();*
// Document repository
public async Task<IEnumerable<JObject>> GetDocsFromCollectionAsync(string someId)
{
DocumentClient client = new DocumentClient(new Uri(EndpointUrl), PrimaryKey);
IDocumentQuery<JObject> documentQuery;
var documentCollectionUri = UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId);
var queryOptions = new FeedOptions { MaxItemCount = -1 };
if (someId.IsNullOrEmpty())
{
// This works
documentQuery = client.CreateDocumentQuery<JObject>(documentCollectionUri,queryOptions)
.AsDocumentQuery();
}
else
{
var query = new SqlQuerySpec(
"SELECT * FROM c WHERE c.someId = @someId",
new SqlParameterCollection(new SqlParameter[] { new SqlParameter { Name = "@someId", Value = someId } }));
// This hangs during execution / returns 404 in the API controller
documentQuery = client.CreateDocumentQuery<JObject>(documentCollectionUri, query, queryOptions)
.AsDocumentQuery();
}
List<JObject> documents = new List<JObject>();
while (documentQuery.HasMoreResults)
{
var feedResponse = await documentQuery.ExecuteNextAsync<JObject>();
documents.AddRange(feedResponse);
}
return documents; // Return documents to API controller
}