/// <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)); }
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); }
/// <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<T>.</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; } }