DocumentClient.CreateDocumentQuery выдает ошибку «не экземпляр» при выполнении запроса - PullRequest
0 голосов
/ 17 февраля 2019

Я пишу веб-сервис .NET, который принимает документы из базы данных cosmosDB.Я пишу функцию в другом проекте (который должен быть настолько универсальным, насколько это возможно) для извлечения документа, чтобы WS использовал его.

Я использую DocumentClients function CreateDocumentQuery вот так:

public static async Task<T1> GetMyDocumentAsync<T1>(eDataBase databaseName, eCollection collectionName, eFields key, string val)
{
    var option = new FeedOptions { EnableCrossPartitionQuery = true };
    Uri uri = UriFactory.CreateDocumentCollectionUri(databaseName.ToString(), collectionName.ToString());
    IQueryable<T1> res = Client.CreateDocumentQuery<T1>(uri, option);
    document = res.AsEnumerable<T1>().FirstOrDefault();
}

Это отлично работает, возвращая первый документ в базе данных.Но при изменении использования CreateDocumentQuery на это:

IQueryable<T1> res = Client.CreateDocumentQuery<T1>(uri, "SELECT * FROM c",option);

И, заключенный в блок try-catch, выдается исключение, которое имеет InnerException, в котором говорится:

Objectне установлен для экземпляра объекта.

Также некоторые поля исключений:

Data = {System.Collections.ListDictionaryInternal}

и

Error = {{ "code": "BadRequest",
           "message": "\r\nActivityId: SOMEGUID" }}

Запрос работает на этомколлекция с портала Azure.

Используемые мной свойства клиента:

ConnectionMode = Шлюз и Протокол = Https .

Есть идеи, почему это использование работает, а другое, использующее явную строку запроса, не будет?Я также пытался использовать объект SqlQuerySpec, и результат был таким же.Я не хочу использовать функцию Where(), так как я хочу использовать универсальные типы.Ключевое слово async предназначено для будущего использования.

1 Ответ

0 голосов
/ 18 февраля 2019

Итак, я решил это.

При создании коллекции, которую я пытался выполнить в вопросе, я заметил, что ключ раздела является обязательным.У всех моих других коллекций в космосе не было ни одной.Поэтому я решил, что некоторые настройки должны отличаться для коллекций, имеющих ключи разделов.

Часть, которая выдает пустое исключение, перечисляет запрос документа.Использование документации выглядело нормально в соответствии с документацией, поэтому я подумал, что проблема была в CreateDocumentQuery.Это связано с тем, что он создал «неисправный» объект с некоторыми пустыми полями, и это может быть связано с изменением ключей раздела коллекции.

Поэтому я попытался обновить пакет Microsoft.Azure.DocumentDB для всего своего решения до последней стабильной версии (в настоящее время 2.2.0), а затем он просто заработал.

...