是否有任何方法可以更新 Azure 表中的单行单个属性?

Posted

技术标签:

【中文标题】是否有任何方法可以更新 Azure 表中的单行单个属性?【英文标题】:Is There Any Method To Update Single Row Single Property in Azure Table? 【发布时间】:2020-08-17 05:18:16 【问题描述】:

这里有详细的问题

我有一个 Azure 表,该表中有多个行,但我的要求是根据唯一 ID 更新单个属性,这有助于查找或获取记录并更新相关属性

我尝试了很多,但找不到任何解决此问题的方法。

如果有任何其他解决方案可以解决这个问题,请分享它会对我有很大帮助。

【问题讨论】:

这能回答你的问题吗? ***.com/questions/37368447/…。简而言之,您可以使用 DynamicEntity,设置其 PartitionKey 和 RowKey 以及要更新的属性,以及 ETag=* 并调用 Merge 或 InsertOrMerge 方法。 @MartinStaufcik,合并操作可以将现有值更新为新值还是应该添加新属性及其值? 动态实体只允许更新选定的属性。当使用尚未在表中的属性调用合并时,会为此值创建一个新列。 @MartinStaufcik,感谢您的努力。根据我目前对天蓝色表的研究,没有直接的解决方案来更新特定属性,而不是通过插入或合并方法创建新的引用。 【参考方案1】:

根据我的测试,我们可以使用merge操作将已有的属性值更新为新的值或者添加新的属性。同时,即使新实体没有在新实体中定义新属性,也会保留旧属性。

例如

CloudStorageAccount account = CloudStorageAccount.Parse(" connection string");
            CloudTableClient tableClient = account.CreateCloudTableClient();
            CloudTable table =tableClient.GetTableReference("people");
            DynamicTableEntity entity = new DynamicTableEntity("Jim", "Xu");

            TableOperation retrieveOperation = TableOperation.Retrieve<DynamicTableEntity>(entity.PartitionKey, entity.RowKey);
            TableResult result = await table.ExecuteAsync(retrieveOperation);
            DynamicTableEntity tableEntity = result.Result as DynamicTableEntity;

            var test = "";
            foreach (var pro in tableEntity.Properties) 

                Console.WriteLine(pro.Key);
                Console.WriteLine(pro.Value.StringValue);
                test = pro.Key;
            
            Console.WriteLine("update the existing last property and add a new property");
            entity.Properties.Add(test, new EntityProperty("testvalue"));
            if (!(tableEntity.Properties.Keys.Contains("Age"))) 

                entity.Properties.Add("Age", new EntityProperty("20"));

            ;
            TableOperation mergeOperation = TableOperation.InsertOrMerge(entity);
             await table.ExecuteAsync(mergeOperation);
            result = await table.ExecuteAsync(retrieveOperation);
            tableEntity = result.Result as DynamicTableEntity;
            foreach (var pro in tableEntity.Properties)
            

                Console.WriteLine(pro.Key);
                Console.WriteLine(pro.Value.StringValue);
            
            Console.Read();


更新

我原来的表

我的代码

CloudStorageAccount account = CloudStorageAccount.Parse(" connection string");
           CloudTableClient tableClient = account.CreateCloudTableClient();
            CloudTable table =tableClient.GetTableReference("people");
            DynamicTableEntity entity = new DynamicTableEntity("Jim", "Xu");
            entity.Properties.Add("Age", new EntityProperty("21"));
            TableOperation mergeOperation = TableOperation.InsertOrMerge(entity);
            await table.ExecuteAsync(mergeOperation);

结果


更新1

我使用分区键 = Jim 和行键 = Xu 更新电子邮件

CloudTableClient tableClient = account.CreateCloudTableClient();
            CloudTable table =tableClient.GetTableReference("people");
            DynamicTableEntity entity = new DynamicTableEntity("Jim", "Xu");
            entity.Properties.Add("Email", new EntityProperty("tets1@gamil.com"));
            TableOperation mergeOperation = TableOperation.InsertOrMerge(entity);
            await table.ExecuteAsync(mergeOperation);

【讨论】:

感谢您的努力,但我的问题无法通过合并方法解决。我已经试过了 @RahulDhoundiyal 能否请您详细说明错误信息? 因此没有错误!!我的上述问题是关于一种方法的。并且您的代码和逻辑的 sn-p 必须是正确的,但是根据我的问题,不合适,因为我想在不添加新的或类似的属性的情况下更新属性,并且根据我的理解,合并操作可以添加新的或类似的属性没有替换现有的属性值。 @RahulDhoundiyalr 请看我的结果。它可以更新现有的属性值。 能不能分享一下azure table view结构的sn-p,console view更清晰。

以上是关于是否有任何方法可以更新 Azure 表中的单行单个属性?的主要内容,如果未能解决你的问题,请参考以下文章

用单个列从另一个表更新一个表中的多个列?

使用 Ajax 更新特定对象中单个字段的正确方法

无法更新表中的列 它返回单行子查询返回多个

是否可以将 Azure 文件共享中的单个文件/文件夹挂载到 Azure 容器实例

Azure CDN 中的详细访问日志

如何从1个表中选择许多行并将其插入另一个表中特定行的特定JSONB字段中?但是在单个原始SQL查询中