Я пишу веб-службу .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 предназначалось для использования в будущем.
DocumentClient
. Я пытался отладить его для нулей в течение некоторого времени, но я не нашел ничего полезного. Нулевая ссылка возникает, когда я пытаюсь взять первый элемент, преобразовать его в список или просто перечислить перечисляемое. Но опять же, когда я делаю то же самое без аргумента запроса, перечисление работает. - person Nexaspx   schedule 18.02.2019