如何在azure表存储中的列中附加值?

时间:2019-04-07 06:05:23

标签: c# azure azure-table-storage

我目前在表存储中有一个现有项目
分区键=测试,行键=鲍勃,数字= 911
现在说我要测试以查看列名下是否有值对于此人,如果有,则在其后附加另一个数字,以;

分隔

我尝试了InsertOrMerge(),但是它替换了值,我希望将值附加到不删除的列中。


编辑:这是我尝试的代码

Word(token.stem())

我知道我做得不好,我不知道将119附加到现有数字值的确切方法,但是我希望它在“数字”列下为911; 119。

1 个答案:

答案 0 :(得分:1)

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);
        }