Я столкнулся с этим исключением, пытаясь вставить сущности в таблицу cosmos db.
Предоставленный ключ раздела либо не соответствует определению в коллекции, либо не соответствует значениям поля ключа раздела указано в документе
Таблица была недавно создана и в ней нет данных, у нее есть TTL по умолчанию, и я предоставляю новые руководства для ключа раздела / ключа строки, поэтому я не уверен, что root причина этого исключения
public class MyEntity : TableEntity
{
public MyEntity()
{
}
public MyEntity(string partitionKey, string rowKey, DateTime timeStamp, string notificationPayload) : base(partitionKey, rowKey)
{
this.Id = partitionKey;
this.MessageId = rowKey;
this.DeviceTimeStamp = timeStamp;
this.Payload = notificationPayload;
}
public string Id { get; set; }
public string MessageId { get; set; }
public DateTime DeviceTimeStamp { get; set; }
public string Payload { get; set; }
public byte[] PayloadBytes { get; set; }
}
public static class Utility
{
private static CloudTableClient cloudTableClient = GetCloudTableClient();
public static CloudTable GetCloudTableReference(string tableName)
{
CloudTable entityTable = cloudTableClient.GetTableReference(tableName);
entityTable.CreateIfNotExists();
return entityTable;
}
private static CloudTableClient GetCloudTableClient()
{
var storageConnectionString = "connectionstring";
CloudStorageAccount storageAccount;
// read command repository connection string
if (!CloudStorageAccount.TryParse(storageConnectionString, out storageAccount))
{
throw new InvalidOperationException("Invalid storage connection string");
}
// create the table client
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
return tableClient;
}
}
class Program
{
static void Main(string[] args)
{
SaveDeviceNotificationAsync(new MyEntity(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), DateTime.UtcNow, null)).GetAwaiter().GetResult();
}
public async static Task<bool> SaveDeviceNotificationAsync(MyEntity entity)
{
try
{
var commandTable = Utility.GetCloudTableReference("MyTableName");
var insertOperation = TableOperation.InsertOrMerge(entity);
var result = await commandTable.ExecuteAsync(insertOperation).ConfigureAwait(false);
if (result.HttpStatusCode != (int)HttpStatusCode.NoContent)
{
throw new Exception($"Failed to save message with id {entity.MessageId}.");
}
return true;
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
finally
{
}
}
}