private async Task <TableResult> ExecuteAsync(TableOperation operation) { var rollbackAction = CreateRollbackAction(operation); var result = await storageTable.ExecuteAsync(operation); Scope.RollbackActions.Enqueue(rollbackAction); if (operation.Entity is IAuditTracker) { // Make sure we do not use same RowKey and PartitionKey var auditEntity = ObjectExtensions.CopyObject <T>(operation.Entity); auditEntity.PartitionKey = $"{auditEntity.PartitionKey}-{auditEntity.RowKey}"; auditEntity.RowKey = $"{DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.fff")}"; var auditOperation = TableOperation.Insert(auditEntity); var auditRollbackAction = CreateRollbackAction(auditOperation, true); var auditTable = tableClient.GetTableReference($"{typeof(T).Name}Audit"); await auditTable.ExecuteAsync(auditOperation); Scope.RollbackActions.Enqueue(auditRollbackAction); } return(result); }