Есть ли способ программно определить из 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.