【问题标题】:Exception: Partition key provided ..., when using CreateDocumentUri with a partitioned document db例外:在使用带有分区文档数据库的 CreateDocumentUri 时,提供了分区键...
【发布时间】:2018-02-02 20:03:23
【问题描述】:

DeleteDocumentAsyncReadDocumentAsync 在我有分区集合时不适合我。我用RequestOptions

await client.DeleteDocumentAsync(document.SelfLink, new RequestOptions { 
    PartitionKey = new PartitionKey("mykey")
}).ConfigureAwait(false); // This works.

var uri = UriFactory.CreateDocumentUri("db", "coll", "id1");

await client.DeleteDocumentAsync(uri, new RequestOptions { 
    PartitionKey = new PartitionKey("mykey")
}).ConfigureAwait(false); // This throws

提供的分区键与集合中的定义不对应,或者与文档中指定的分区键字段值不匹配。

有什么想法吗?

【问题讨论】:

  • myKey in new PartitionKey("mykey") 是 PartitionKey 属性的名称(例如lastName)还是属性的值(例如Smith)?
  • 感谢您的帮助,但为什么使用错误值的 SelfLink 会成功?
  • @Jose 如果我为分区键设置了错误的值,我将无法使用 selfLink 或 uri 删除文档。您能发布您的示例数据结构吗?顺便说一句,该类应该是代码中的 RequestOptions 而不是 RequestOption。
  • @Jose 嗨,有进展吗?我的回答对你有帮助吗?
  • 对不起@Jay,我一直在其他地方忙。我将尽快尝试在我们的代码库之外重写一个由其他人编写的简单示例。

标签: c# azure azure-cosmosdb


【解决方案1】:

我尝试了您的引发异常的代码 sn-p,它对我有用。

我想你误解了RequestOptionspartitionkey 属性的含义。

例如,我的容器是这样创建的:

这里的分区键是我收藏的“名称”。您可以检查您的收藏的分区键。

我的文件如下:

{
    "id": "1",
    "name": "jay"
}

{
    "id": "2",
    "name": "jay2"
}

我的partitionkey'name',所以这里我有两个分区:'jay''jay1'。 p>

因此,您应该在此处将partitionkey 属性设置为“jay”或“jay2”,而不是“name”。

var uri = UriFactory.CreateDocumentUri("db", "part", "1");

client.DeleteDocumentAsync(uri, new RequestOptions
{
    PartitionKey = new PartitionKey("jay")
}).ConfigureAwait(false); 

希望对你有帮助。

【讨论】:

  • 我在您创建容器的屏幕截图中看不到分区键的定义。你能解释一下那部分吗?因为在这里我遇到了困难 - 我知道如何在以后的 CRUD 操作中传递密钥,但在创建集合时似乎有问题。如何指定哪个是分区键?
猜你喜欢
  • 2019-08-06
  • 1970-01-01
  • 2019-06-12
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 2018-06-18
  • 1970-01-01
  • 2018-01-29
相关资源
最近更新 更多