API таблиц Cosmos с параметрами параллелизма If-Math для ETag - PullRequest
0 голосов
/ 19 июня 2020

Я использую API таблиц CosmosDB с Microsoft.Azure.Cosmos.Table, а объект CloudTable не предлагает никаких операций обновления / вставки, которые учитывают заголовок If-Match в ETag. Доступные варианты приведены ниже - ни один из них не предлагает условие If-Match:

    public static TableOperation Insert(ITableEntity entity);
    public static TableOperation Insert(ITableEntity entity, bool echoContent);
    public static TableOperation InsertOrMerge(ITableEntity entity);
    public static TableOperation InsertOrReplace(ITableEntity entity);
    public static TableOperation Merge(ITableEntity entity);
    public static TableOperation Replace(ITableEntity entity);

Как достичь ограничения If-Match здесь при обновлении?

PS: Попытка избежать написания JS резольвер

1 Ответ

1 голос
/ 19 июня 2020

Как достичь здесь ограничения If-Match при обновлении?

ITableEntity имеет свойство с именем ETag. Для условных обновлений вам нужно будет использовать это. Если вы укажете * для значения ETag, объект всегда будет обновляться. Если вы укажете любое значение, кроме *, объект будет обновлен только в том случае, если значение ETag объекта на сервере совпадает с указанным вами значением.

UPDATE

Итак, я написал пример кода для проверки условного обновления:

        var account = CloudStorageAccount.Parse(connectionString);
        var tableClient = account.CreateCloudTableClient();
        var table = tableClient.GetTableReference("Test");

        var entity = new MyEntity();
        entity.PartitionKey = "pk4";
        entity.RowKey = "rk4";
        entity.MyIgnoredProperty = "ignored - updated";
        entity.MyOtherProperty = "not ignored - updated";
        entity.ETag = "W/\"0x5B168C7B6E589D2\"";//This is a dummy Etag value to fail the replace operation
        TableOperation replaceOperation = TableOperation.Replace(entity);
        var result = table.Execute(replaceOperation);//Fails with 412 status code
        Console.WriteLine(entity.ToString());
        Console.ReadLine();

и отследил запрос через Fiddler. Если вы заметили, значение ETag передается как If-Match заголовок запроса.

enter image description here

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