Как добавить значение в столбец в хранилище таблицы Azure? - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть существующий элемент в хранилище таблицы.
partitionkey = test, rowkey = bob, number = 911
Теперь позвольте мне сказать, что я хочу проверить, есть ли значение под именем столбца для этого индивидуальный, если есть, добавьте его с другим числом, разделенным;

Я пробовал InsertOrMerge (), но он заменяет значение, я хочу, чтобы значение добавлялось в столбец, а не удалялось.


Редактировать: Вот код, который я пытался

string tableName = "test2";
var batch = new TableBatchOperation();
CloudStorageAccount storageAccount = 
CreateStorageAccountFromConnectionString(storageConnectionString);
CloudTableClient tableClient = storageAccount.CreateCloudTableClient(new 
TableClientConfiguration());
CloudTable table = tableClient.GetTableReference(tableName);
CustomerEntityTwo test = new CustomerEntityTwo("test", "bob")
{
  number= "119"

};
batch.InsertOrMerge(test);
table.ExecuteBatch(batch);

Я знаю, что я делаю это неправильно, я не знаю точно, как правильно добавить 119 к существующему числовому значению, но мне бы хотелось, чтобы это было 911; 119 в столбце 'число'.

1 Ответ

1 голос
/ 07 апреля 2019

InsertOrMerge операция не работает так, как вы думаете.Она создаст объект, если он не существует, или объединит атрибуты с существующими атрибутами (добавление новых атрибутов, обновление существующих значений атрибутов и не касаясь отсутствующих атрибутов), если объект существует.

В вашем сценарии вы хотитепроверить, присутствует ли атрибут в объекте.Если атрибут присутствует, вы хотите взять существующее значение этого атрибута, добавить новое значение к этому элементу и затем снова сохранить этот атрибут.

Для этого сначала вам нужно будет извлечь эту сущность изхранилище, сравните значение с новым значением, обновите значение и затем вызовите операцию Merge для этого объекта.

Например, см. пример кода ниже:

        var storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=account-name;AccountKey=acccount-key;EndpointSuffix=core.windows.net;");
        var client = storageAccount.CreateCloudTableClient();
        var table = client.GetTableReference("test");
        var partitionKey = "test";
        var rowKey = "bob";
        var valueToCheck = "119";
        var insertOrMergeEntity = true;
        var op = TableOperation.Retrieve(partitionKey, rowKey);
        var result = table.Execute(op);
        var entity = result.Result as DynamicTableEntity;
        if (entity == null)
        {
            entity = new DynamicTableEntity(partitionKey, rowKey);
        }
        if (entity.Properties.ContainsKey("number"))
        {
            var numberAttributeValue = entity.Properties["number"].StringValue;
            if (numberAttributeValue.IndexOf(valueToCheck) < 0)
            {
                numberAttributeValue += "; " + valueToCheck;
                entity.Properties["number"] = new EntityProperty(numberAttributeValue);
            }
            else
            {
                insertOrMergeEntity = false;
            }
        }
        else
        {
            entity.Properties.Add("number", new EntityProperty(valueToCheck));
        }
        if (insertOrMergeEntity)
        {
            var mergeOperation = TableOperation.InsertOrMerge(entity);
            table.Execute(mergeOperation);
        }
...