Требуется ли ключ раздела при работе с эмулятором CosmosDB? - PullRequest
0 голосов
/ 11 октября 2019

Попытка удалить документ CosmosDB через DeleteDocumentAsync дает мне исключение Microsoft.Azure.Documents.DocumentClientException: Сообщение: {"Ошибки": ["Ресурс не найден"]} независимо от того, что я пытаюсь. Я сейчас использую локальный эмулятор CosmosDB с одной коллекцией и одной записью, поэтому я не определил ни одного ключа разделения.

Это моя структура документа:

{
"id": "a1032017-c131-4fe0-a045-1d342bc56410",
"Code": "059058",
"Key": "f9971f3a-9737-4da5-90df-2ab7f93ba679",
"CreatedOn": "2019-09-30T15:50:53.0368614-04:00",
"TTL": 1440,
"PhoneNumber": "1112223333",
"_rid": "35E3AOfSiUUBAAAAAAAAAA==",
"_self": "dbs/35E3AA==/colls/35E3AOfSiUU=/docs/35E3AOfSiUUBAAAAAAAAAA==/",
"_etag": "\"00000000-0000-0000-77c8-620aa5ca01d5\"",
"_attachments": "attachments/",
"_ts": 1569873059

}

Код для удаления:

public async Task Delete<T>(T codeKeyPairModel) where T : CodeKeyPairModel
    {
        var documentLink = UriFactory.CreateDocumentUri(cosmosDBId, collectionId, codeKeyPairModel.Id.ToString());
        var result = await cosmosDBClient.DeleteDocumentAsync(documentLink,
                new RequestOptions() { PartitionKey = new PartitionKey(Undefined.Value) });
    }

значение documentLink:

{dbs/CodeCheckerDB/colls/CodeKeyPair/docs/a1032017-c131-4fe0-a045-1d342bc56410}

Требуется ли для эмулятора установить раздел даже для небольших БД? Если так, как я могу установить один?

1 Ответ

0 голосов
/ 14 октября 2019

Я сделал тест для вашего образца, он работает для меня. Вы можете удалить настройки PartitionKey, потому что вы сказали, что ваша коллекция - это одна коллекция, а не секционированная коллекция. Нет необходимости указывать ключ разделения.

Мой код:

DocumentClient documentClient = new DocumentClient(new Uri(endpointUrl), authorizationKey);

var documentLink = UriFactory.CreateDocumentUri(databaseId, collectionId, "a1032017-c131-4fe0-a045-1d342bc56410");

await documentClient.DeleteDocumentAsync(documentLink, null);
...