Есть ли способ программно определить по DocumentClientException
где StatusCode == HttpStatusCode.NotFound
, был ли документ, коллекция или база данных не найдены?
Я пытаюсь понять, могу ли я реализовать подготовку коллекции по требованию и вызывать DocumentClient.CreateDocumentCollectionIfNotExistsAsync
только тогда, когда мне нужно. Я пытаюсь не вызывать его перед каждым запросом (по-видимому, это добавляет дополнительный сетевой обход для каждого запроса). Точно так же я стараюсь не вызывать его при восстановлении после ошибок, когда знаю, что это не поможет.
По результатам экспериментов с локальным эмулятором, единственное поле, которое я вижу, меняется в этих трех случаях, - это DocumentClientException.Error.Message
, и только тогда, когда не удается найти базу данных. Обычно я стараюсь избегать отправки исключений на основе удобочитаемых сообщений.
Неверное имя базы данных:
StatusCode
:HttpStatusCode.NotFound
Error.Message
:{\"Errors\":[\"Owner resource does not exist\"]}...
Правильное название базы данных, неправильное название коллекции:
StatusCode
:HttpStatusCode.NotFound
Error.Message
:{\"Errors\":[\"Resource Not Found\"]}...
Правильное имя базы данных, правильное название коллекции, неправильный идентификатор документа:
StatusCode
:HttpStatusCode.NotFound
Error.Message
:{\"Errors\":[\"Resource Not Found\"]}...
Я планирую использовать базу данных с собственным предложением. Поскольку коллекции внутри базы данных с собственным предложением дешевы, я пытаюсь проверить, может выделить каждого арендатора в моем мультитенантном приложении в его собственную коллекцию. У каждого клиента своя политика индексирования и TTL по умолчанию. Набор коллекций не является фиксированным и динамически изменяется во время выполнения по мере регистрации новых клиентов. Я не могу предсказать, когда мне нужно будет добавить новую коллекцию. Уведомления о новом клиенте нет: я просто получаю запрос, который мне нужно обработать, создав документ в, возможно, несуществующей коллекции. Есть процесс сбора неиспользуемых коллекций мусора.
Я использую пакет NuGet Microsoft.Azure.DocumentDB.Core версии 1.9.1 в приложении .NET Core 2.1, ориентированном на экземпляр SQL API Cosmos DB.
DocumentClient.CreateDocumentCollectionIfNotExistsAsync
при инициализацииDocumentClient
? В любом случае это должен быть синглтон. - person Nick Chapsas   schedule 30.08.2018