コード例 #1
0
        /// <summary>
        /// Gets the entity from the requested table, using the key identifier.
        /// </summary>
        /// <typeparam name="T">Type of object returned.</typeparam>
        /// <param name="tableName">Name of the table to search.</param>
        /// <param name="key">The key, used to find the entity.</param>
        /// <returns>Task of type T.</returns>
        /// <inheritdoc cref="ITableStorage.GetEntity{T}" />
        public async Task <T> GetEntity <T>(string tableName, string key) where T : class, ITableItem, new()
        {
            try
            {
                var parts = GetKeySegments(key);
                var table = CloudTableClient.GetTableReference(tableName);

                // Load the DynamicTableEntity object from Storage using the keys.
                var operation = TableOperation.Retrieve(parts[0], parts[1]);
                var result    = await table.ExecuteAsync(operation);

                if (result.Result == null)
                {
                    return(null);
                }

                // Return the converted generic object.
                return(TableEntityConvert.FromTableEntity <T>(result.Result));
            }
            catch (Exception e)
            {
                Logger?.LogError(e, $"Error {e.Message} occurred retrieving, table name: {tableName}, key: {key}");
                throw;
            }
        }
        public void Test_TableEntityConvert_ConvertFailure()
        {
            // Arrange
            object tableEntity = default(DynamicTableEntity);

            // Act/Assert
            Assert.Throws <ArgumentException>(() => TableEntityConvert.FromTableEntity <SampleEntity>(tableEntity));
        }
コード例 #3
0
        public async Task <Customer> GetCustomer(string lastName, string firstName)
        {
            // Load the DynamicTableEntity object from Storage using the keys
            var operation = TableOperation.Retrieve(lastName, firstName);
            var result    = await _cloudTable.ExecuteAsync(operation);

            // Convert into the POCO using TableEntityConvert.FromTableEntity<T>()
            var customer = TableEntityConvert.FromTableEntity <Customer>(result.Result);

            return(customer);
        }
コード例 #4
0
        /// <summary>
        /// Internal list all the entities within a given table, using the supplied query as an observable.
        /// </summary>
        /// <typeparam name="T">Type of object returned.</typeparam>
        /// <param name="tableName">Name of the table to search.</param>
        /// <param name="tblQuery">The query to use when finding items.</param>
        /// <param name="token">Cancellation token source.</param>
        /// <returns>IObservable&lt;T&gt;.</returns>
        private IObservable <T> ListEntitiesObservable <T>(string tableName, TableQuery <DynamicTableEntity> tblQuery, CancellationTokenSource token)
            where T : class, ITableItem, new()
        {
            try
            {
                var table = CloudTableClient.GetTableReference(tableName);

                return(Observable.Create <T>(async obs =>
                {
                    TableContinuationToken continuationToken = null;

                    do
                    {
                        // Stop when cancellation requested.
                        if (token != null && token.IsCancellationRequested)
                        {
                            continuationToken = null;
                        }
                        else
                        {
                            var response = await table.ExecuteQuerySegmentedAsync(tblQuery, continuationToken, new TableRequestOptions
                            {
                                RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(5), 5)
                            }, null);

                            continuationToken = response.ContinuationToken;

                            // Raise the observable OnNext for each result to be processed.
                            foreach (var item in response.Results)
                            {
                                obs.OnNext(TableEntityConvert.FromTableEntity <T>(item));
                            }
                        }
                    } while (continuationToken != null);

                    obs.OnCompleted();
                }));
            }
            catch (Exception e)
            {
                Logger?.LogError(e, $"Error {e.Message} occurred listing entities, tablename: {tableName}");
                throw;
            }
        }