Azure Table 存储 InsertOrMerge
Azure Table Storage InsertOrMerge
我有一个包含一些数据的 Azure Table 存储。我需要为 table 中的所有记录更新一个 属性。我知道每个项目的分区键和行键。但是可能是这样,我的 CSV 文件中有新项目。
我需要做的是:
- 如果基于 ParitionKey 和 RowKey 在 table 存储中找到一个项目,我想更新一个 属性: Name.
- 如果在 table 中找不到某个项目,则必须将其插入,但我还有更多属性需要填写:姓名、电子邮件、地址
我正在尝试使用 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).'
您的要求可以通过Retrieve
和InsertOrMerge
实现。
将两个属性 Email
和 Address
添加到您的 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
,
- 如果该项目存在,其内容(名称)将由您的新项目更新。
- 如果不存在,将按预期插入。
我有一个包含一些数据的 Azure Table 存储。我需要为 table 中的所有记录更新一个 属性。我知道每个项目的分区键和行键。但是可能是这样,我的 CSV 文件中有新项目。
我需要做的是:
- 如果基于 ParitionKey 和 RowKey 在 table 存储中找到一个项目,我想更新一个 属性: Name.
- 如果在 table 中找不到某个项目,则必须将其插入,但我还有更多属性需要填写:姓名、电子邮件、地址
我正在尝试使用 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).'
您的要求可以通过Retrieve
和InsertOrMerge
实现。
将两个属性 Email
和 Address
添加到您的 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
,
- 如果该项目存在,其内容(名称)将由您的新项目更新。
- 如果不存在,将按预期插入。