10

行キー値のみでAzureストレージフィルターから行を削除しようとしています。しかし、行キーのみでフィルタリングできる削除操作のオーバーロードは見られません。特定の行キーを持つレコードの azure ストレージ テーブルから行を削除する代替オプションはありますか?

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

8 に答える 8

11

PartitionKeyエンティティを削除するには、とRowKey( )の両方が必要ですDelete Entity REST API。したがって、最初に一致するエンティティを取得する必要がありますRowKey。このエンティティをフェッチしたらTableOperation.Delete、回答に記載されているように呼び出すことができるはずです。

ただし、 Full Table Scan を実行するため、 によるエンティティのフェッチRowKeyはお勧めしません。テーブルのサイズが小さい場合は問題にならないかもしれませんが、テーブルに多数のエンティティが含まれている場合は問題になります。さらに、aRowKeyは a 内で一意です。つまり、テーブル内では/の組み合わせPartitionを持つエンティティは 1 つしか存在できません。言い換えれば、異なるに同じエンティティを持つ可能性があります。そのため、エンティティのみを取得すると、複数のエンティティが返される場合があります。正しいエンティティを削除していることを確認する必要があります。PartitionKeyRowKeyRowKeyPartitionsRowKey

于 2016-05-13T05:12:00.207 に答える
4

.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;
于 2019-02-06T09:50:36.613 に答える
2

方法はありません

TableOperation.Delete(String rowKey)

唯一の方法

public static TableOperation delete(final TableEntity entity)

テーブル操作で。詳細については、「. NET を使用した Azure テーブル ストレージの使用を開始する」を参照してください

于 2016-05-13T04:43:48.153 に答える
2

行ごとに、レコードを意味しますか?

TableOperation.Delete はテーブル エンティティを受け入れます。ここを参照してください: https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.table.tableoperation.delete.aspx

そのエンティティを削除するには、まずそのPartitionキーやキーを指定してエンティティを取得する必要がありRowます。

ここで TableQuery クラスを調べますhttps://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.table.tablequery_methods.aspx

取得したら、Delete メソッドに渡します。

于 2016-05-13T04:12:34.197 に答える
0

名前 Windows.Azure.Storage空間は、名前空間を支持して非推奨Azure.Data.Tablesになりました。そのため、このTableOperation.Deleteメソッドも非推奨ですTableClient次に、 aとそのDeleteEntityメソッドを使用する必要があります。

TableClient tableClient = new TableClient(connectionString, Table);
tableClient.DeleteEntity(PartitionKey, RowKey);

必要に応じて、非同期バージョンもありDeleteEntityAsyncます。

于 2021-11-02T16:11:59.373 に答える
0

フランクのポインターを参照して、同様の問題に直面している他の人に役立つように回答を投稿しています。

RemoveEntityByRowKey('123456');
public static void RemoveEntityByRowKey(string myRowKey)
        {
            try
            {
                CloudTable table = _tableClient.GetTableReference("MyAzureTable"); 

   TableQuery<myEntity> query = new TableQuery<myEntity>()
                   .Where(TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, myRowKey));

                foreach (var item in table.ExecuteQuery(query))
                {
                    var oper = TableOperation.Delete(item);
                    table.Execute(oper);                    
                } 
            }
            catch (Exception ex)
            {
                LogErrorToAzure(ex);
                throw;
            }
        }
于 2016-05-13T05:30:47.700 に答える