DocumentClient.CreateDocumentQuery выдает ошибку "не экземпляр" при выполнении запроса

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

я использую DocumentClients функция 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 что говорится:

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

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

Data = {System.Collections.ListDictionaryInternal}

а также

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

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

Свойства клиента, которые я использую:

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

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

1 ответ

Решение

Так что я решил это.

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

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

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

Другие вопросы по тегам