Azure Table 存储 InsertOrMerge

Azure Table Storage InsertOrMerge

我有一个包含一些数据的 Azure Table 存储。我需要为 table 中的所有记录更新一个 属性。我知道每个项目的分区键和行键。但是可能是这样,我的 CSV 文件中有新项目。

我需要做的是:

我正在尝试使用 InsertOrMerge,但出现 Etag 异常,如果找不到该项目并且需要插入,我该如何设置更多属性?

var storageAccount = CloudStorageAccount.Parse(connectionString);
var cloudTableClient = storageAccount.CreateCloudTableClient();
var ct = cloudTableClient.GetTableReference("mytable");

var item = new Item()
{
    PartitionKey = "PARTITIONID",
    RowKey = "ROWID",                
    Name = "DEMO",                     
};

var to = TableOperation.Merge(code);
var result = await ct.ExecuteAsync(to);

当我使用 Merge 操作 table 中不存在的实体时,我也遇到了 etag 异常。

System.ArgumentException: 'Merge requires an ETag (which may be the '*' wildcard).'

您的要求可以通过RetrieveInsertOrMerge实现。

将两个属性 EmailAddress 添加到您的 Item class。

 public class Item: TableEntity
 {
    public Item(String PartitionKey, String RowKey, String Name, String Email=null, String Address=null)
    {
        this.RowKey = RowKey ;
        this.PartitionKey = PartitionKey;
        this.Name = Name;
        this.Email = Email;
        this.Address = Address;
    }

    public Item(){}

    public String Name { get; set; }

    public String Email { get; set; }

    public String Address { get; set; }

}

添加 if 开关以告知要加载哪些属性。

 TableOperation to = TableOperation.Retrieve<Item>("PK","RK");

 TableResult tr = table.ExecuteAync(to).Result;

 var item;

 if (tr != null)
 {
     item = new Item
     {
         PartitionKey = "PARTITIONID",
         RowKey = "ROWID",                
         Name = "DEMO",  
     }
 }
 else
 {
     item = new Item
     {
         PartitionKey = "PARTITIONID",
         RowKey = "ROWID",                
         Name = "DEMO",  
         Email = "test@example.com",
         Address = "Britain"
     }
 }

 to = TableOperation.InsertOrMerge(item);

 tr = await ct.ExecuteAysnc(to).Result;

。当你执行 InsertOrMerge,

  • 如果该项目存在,其内容(名称)将由您的新项目更新。
  • 如果不存在,将按预期插入。