Как использовать SQL-запрос с клиентом CosmosDB в приложении C# .NET Core 2.1 API
Я пытаюсь использовать хранилище Azure CosmosDB (ранее DocumentDB) в создаваемом мной API (я совсем новичок в C#). Мне удалось получить результат со всеми документами, используя метод client.CreateDocumentQuery, не передавая SQL-запрос к нему. Тем не менее, когда я передаю SQL-запрос, выполнение программы зависает, и контроллер отвечает 404. Я попытался добавить попытку, но не получаю никаких исключений или чего-либо еще.
Использование 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
}