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), а затем он просто заработал.