Коллекция базы данных Azure cosmos не получает ключ раздела - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь создать базу данных и коллекцию Azure Cosmos в моем c# коде.

await client.CreateDatabaseIfNotExistsAsync(new Database() { Id = "data"});
DocumentCollection dCollection = await client.CreateDocumentCollectionIfNotExistsAsync(UriFactory.CreateDatabaseUri("data"), new DocumentCollection { Id = "coll"}, new RequestOptions { OfferThroughput = 400, , PartitionKey = new PartitionKey("/id") });
// dashboardCollection.PartitionKey.Paths.Add("/id");

Когда я захожу на portal.azure.com и проверяю свою базу данных документов, коллекция создается. Когда я иду на Scale and Settings для коллекции, я не вижу ключ раздела.

Я создал другую коллекцию вручную, и она показывает ключ раздела в разделе Scale and Settings.

Функция delete выдает ошибку из-за этой ошибки ключа раздела

Успешно вставил запись с идентификатором 1 в БД документа. Следующее удаление завершается неудачно, говоря, что partitionKey недействительно.

ResourceResponse<Document> response = await client.DeleteDocumentAsync(UriFactory.CreateDocumentUri("data", "coll", "1"), new RequestOptions { PartitionKey = new PartitionKey("1") });

1 Ответ

0 голосов
/ 16 января 2019

Я из инженерной команды CosmosDB.

При создании DocumentCollection убедитесь, что в объекте DocumentCollection указан ключ разделения, например:

PartitionKeyDefinition pkDefn = new PartitionKeyDefinition() { Paths = new Collection<string>() { "/id" } };
DocumentCollection dCollection = await client.CreateDocumentCollectionIfNotExistsAsync(UriFactory.CreateDatabaseUri("data"), new DocumentCollection { Id = "coll", PartitionKey = pkDefn }, new RequestOptions { OfferThroughput = 400, PartitionKey = new PartitionKey("/id") });

PartitionKey для RequestOptions не учитывается во время запросов CRUD для коллекции, поскольку мы ожидаем, что PartitionKey будет частью объекта коллекции. PartitionKey для RequestOptions учитывается при запросах CRUD для документов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...