Kur*_*ula 6 c# azure azure-table-storage cloud-storage
我试图仅通过rowkey值从azure存储过滤器中删除行.但我没有看到删除操作的任何重载,我们只能用rowkey过滤.是否有其他选项可以从azure存储表中删除具有特定rowkey的记录的行?
RemoveEntityByRowKey('123456');
public static void RemoveEntityByRowKey(string myRowKey)
{
try
{
CloudTable table = _tableClient.GetTableReference("MyAzureTable");
TableOperation delteOperation = TableOperation.Delete(myRowKey);
table.Execute(delteOperation);
}
catch (Exception ex)
{
LogError.LogErrorToAzure(ex);
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
要删除实体,您需要PartitionKey和RowKey(Delete Entity REST API).所以你需要做的是先获取匹配的实体RowKey.获取此实体后,您应该能够TableOperation.Delete按照答案中的提及进行调用.
但是,建议不要获取实体,RowKey因为它将执行全表扫描.如果您的表大小很小,这可能不是问题,但是当您的表包含大量实体时会出现问题.此外,一个RowKey是在一个独特的Partition表中的,即只能有一个与一个实体PartitionKey/ RowKey组合.换句话说,您可能具有RowKey不同的实体Partitions.因此,当您RowKey仅获取实体时,您可能会获得多个实体.您需要确保删除正确的实体.
如果您知道 PartitionKey 和 RowKey,则无需检索整个实体即可将其删除。您可以按如下方式调整您的代码:
public static void RemoveEntityByRowKey(string myRowKey)
{
try
{
var entity = new YourEntity
{
PartitionKey = "partition",
RowKey = myRowKey,
ETag = "*"
}
CloudTable table = _tableClient.GetTableReference("MyAzureTable");
TableOperation delteOperation = TableOperation.Delete(entity);
table.Execute(delteOperation);
}
catch (Exception ex)
{
LogError.LogErrorToAzure(ex);
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您的目标是.NET Core,则需要使用该ExecuteQuerySegmentedAsync方法来执行过滤条件查询。ExecuteQuery已弃用。
var cloudTableClient = _cloudStorageAccount.CreateCloudTableClient();
var myTable = cloudTableClient.GetTableReference("MyTable");
var query = new TableQuery<MyEntity>().Where(TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, "myRowKey"));
var segment = await myTable.ExecuteQuerySegmentedAsync(query, null);
var myEntities = segment.Results;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7922 次 |
| 最近记录: |