PartitionKey extracted from document doesn't match the one specified in the header on CreateItemAsync

孤街醉人 提交于 2019-12-11 18:48:26

问题


I have a bit of a problem using Microsoft.Azure.Cosmos version 3.2.0,

upon running

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

it throws

Microsoft.Azure.Cosmos.CosmosException HResult=0x80131500
Message=Response status code does not indicate success: 400 Substatus: 1001 Reason: (Message: {"Errors":["PartitionKey extracted from document doesn't match the one specified in the header"]}

but if I put,

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

it works and it is the only case when it works.

I have also tried: Putting the value for the partition key as a property in the object. Even specifying a a "partitionKey" json property name but no success.

I looked over some guides on the Microsoft site and it seems you can specify the partition key to be some string, not necessary to be the id or specified with a property name on the object; so why is this happening?


回答1:


I've overlooked that when I have created the container

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

I have specified partitionKeyPath as beeing the /id.

It also seems that the partition key must reside on the object and must have a json property of partitionKeyPath property name without / like:

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

if partitionKeyPath is /partition

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

Sorry if this is obvious, I have just started playing around with CosmoDb.



来源:https://stackoverflow.com/questions/58121736/partitionkey-extracted-from-document-doesnt-match-the-one-specified-in-the-head

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!