Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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 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?

like image 568
Gabriel P. Avatar asked Sep 26 '19 17:09

Gabriel P.


1 Answers

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.

like image 193
Gabriel P. Avatar answered Oct 15 '22 11:10

Gabriel P.