Получение ошибки «Предоставленный ключ раздела не соответствует», хотя я его предоставляю? - PullRequest
0 голосов
/ 05 августа 2020

Я столкнулся с этим исключением, пытаясь вставить сущности в таблицу 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
        {
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...