从文档中提取的PartitionKey与CreateItemAsync

时间:2019-09-26 17:13:52

标签: azure-cosmosdb

使用Microsoft.Azure.Cosmos版本3.2.0时,我有点问题

跑步时

await this.Container.CreateItemAsync<LogEntity>(logEntity, new PartitionKey("anythingIPutHere"));

它抛出

  

Microsoft.Azure.Cosmos.CosmosException HResult = 0x80131500
  消息=响应状态代码不表示成功:400子状态:   1001原因:(消息:{“错误”:[”从   文档与标题中指定的文档不匹配“]}

但如果我愿意,

await this.Container.CreateItemAsync<LogEntity>(logEntity, new PartitionKey(logEntity.Id));

它有效,这是唯一可行的情况。

我也尝试过: 将分区键的值作为属性放在对象中。 即使指定了“ partitionKey” json属性名称,也没有成功。

我查看了Microsoft网站上的一些指南,看来您可以将分区键指定为某些字符串,而不必指定为id或在对象上使用属性名称指定;那为什么会这样呢?

1 个答案:

答案 0 :(得分:3)

创建容器时,我已经忽略了

this.Container = await this.Database.CreateContainerIfNotExistsAsync("testContainer", "/id");

我已将partitionKeyPath指定为/id的蜜蜂。

似乎分区键也必须驻留在对象上,并且必须具有partitionKeyPath属性名称的json属性,不带/像这样:

[JsonProperty(PropertyName = "partition")]
public string Partition { get; set; }

如果partitionKeyPath/partition

this.Container = await this.Database.CreateContainerIfNotExistsAsync("testContainer", "/partition");

很抱歉,如果这很明显,我刚刚开始使用CosmoDb。