6

私が持っているとしましょう:

using (TransactionScope scope = new TransactionScope()) 
{
    if (IndexExists(index.RowKey))
        DeleteIndex(index.RowKey); //deletes using TableOperation.Delete

    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConnectionString);
    CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
    CloudTable table = tableClient.GetTableReference(Const.IndexTable);

    TableOperation insertOperation = TableOperation.Insert(index);
    table.Execute(insertOperation);   
}

私が欲しいのはこれです:挿入が失敗した場合、削除を元に戻す必要があります。これは正しい取引方法ですか?すべてが同じパーティション/テーブルで発生します。また、トランザクションの他の制限は何ですか?トランザクション内に格納できるのは4 Mb以下であるとどこかで読んだことがありますが、これはまだ正しいですか?

4

1 に答える 1

12

操作を実行する必要のあるすべてのエンティティが同じPartitionKeyを持っていると仮定すると、Entity Group TransactionWindowsAzureテーブルストレージで利用可能な機能を利用できます。それはまさにそれを行います。トランザクション内のエンティティに対する操作が失敗した場合、トランザクション全体がロールバックされます。

ただし、エンティティを削除して同じエンティティを再度作成しているようです。このシナリオは、エンティティがトランザクションに1回だけ表示され、エンティティに対して1つの操作しか実行できないため、エンティティバッチトランザクションでは機能しません。興味のあるのはエンティティの置き換えのようです。その場合、InsertOrReplace()機能を直接使用できます。

于 2013-03-09T09:56:57.797 に答える