diff --git a/CoreHelpers.WindowsAzure.Storage.Table/StorageContext.cs b/CoreHelpers.WindowsAzure.Storage.Table/StorageContext.cs index 4e6807d..1a1ade7 100644 --- a/CoreHelpers.WindowsAzure.Storage.Table/StorageContext.cs +++ b/CoreHelpers.WindowsAzure.Storage.Table/StorageContext.cs @@ -5,58 +5,65 @@ namespace CoreHelpers.WindowsAzure.Storage.Table { public partial class StorageContext : IStorageContext - { - private IStorageContextDelegate _delegate { get; set; } - private string _connectionString; + { + private IStorageContextDelegate _delegate { get; set; } + private TableServiceClient tableServiceClient { get; set; } - public StorageContext(string storageAccountName, string storageAccountKey, string storageEndpointSuffix = null) - { - _connectionString = String.Format("DefaultEndpointsProtocol={0};AccountName={1};AccountKey={2}", "https", storageAccountName, storageAccountKey); - if (!String.IsNullOrEmpty(storageEndpointSuffix)) - _connectionString = String.Format("DefaultEndpointsProtocol={0};AccountName={1};AccountKey={2};EndpointSuffix={3}", "https", storageAccountName, storageAccountKey, storageEndpointSuffix); - } + public StorageContext(string storageAccountName, string storageAccountKey, string storageEndpointSuffix = null) + { + if (!String.IsNullOrEmpty(storageEndpointSuffix)) + tableServiceClient = new TableServiceClient(string.Format("DefaultEndpointsProtocol={0};AccountName={1};AccountKey={2};EndpointSuffix={3}", "https", storageAccountName, storageAccountKey, storageEndpointSuffix)); + else + tableServiceClient = new TableServiceClient(string.Format("DefaultEndpointsProtocol={0};AccountName={1};AccountKey={2}", "https", storageAccountName, storageAccountKey)); + + } public StorageContext(string connectionString) { - _connectionString = connectionString; + tableServiceClient = new TableServiceClient(connectionString); + } + + public StorageContext(TableServiceClient tableServiceClient) + { + this.tableServiceClient = tableServiceClient; } public StorageContext(StorageContext parentContext) - { + { // we reference the entity mapper _entityMapperRegistry = new Dictionary(parentContext._entityMapperRegistry); // we are using the delegate - this.SetDelegate(parentContext._delegate); + this.SetDelegate(parentContext._delegate); - // take the tablename prefix - _tableNamePrefix = parentContext._tableNamePrefix; + // take the tablename prefix + _tableNamePrefix = parentContext._tableNamePrefix; - // store the connection string - _connectionString = parentContext._connectionString; + // store the connection string + tableServiceClient = parentContext.tableServiceClient; } - + public void Dispose() - {} + { } - public void SetDelegate(IStorageContextDelegate delegateModel) - => _delegate = delegateModel; + public void SetDelegate(IStorageContextDelegate delegateModel) + => _delegate = delegateModel; - public IStorageContextDelegate GetDelegate() - => _delegate; + public IStorageContextDelegate GetDelegate() + => _delegate; + + public IStorageContext CreateChildContext() + => new StorageContext(this); - public IStorageContext CreateChildContext() - => new StorageContext(this); - public TableClient GetTableClient() { - var tableName = GetTableName(); - return GetTableClient(tableName); + var tableName = GetTableName(); + return GetTableClient(tableName); } private TableClient GetTableClient(string tableName) { - return new TableClient(_connectionString, tableName); - } + return tableServiceClient.GetTableClient(tableName); + } } } diff --git a/CoreHelpers.WindowsAzure.Storage.Table/StorageContextTableManagement.cs b/CoreHelpers.WindowsAzure.Storage.Table/StorageContextTableManagement.cs index 123dcfc..28d0d76 100644 --- a/CoreHelpers.WindowsAzure.Storage.Table/StorageContextTableManagement.cs +++ b/CoreHelpers.WindowsAzure.Storage.Table/StorageContextTableManagement.cs @@ -107,8 +107,7 @@ public async Task> QueryTableList() { var tables = new List(); - var tsc = new TableServiceClient(_connectionString); - var tablePages = tsc.QueryAsync().AsPages(); + var tablePages = tableServiceClient.QueryAsync().AsPages(); await foreach (var tablePage in tablePages) tables.AddRange(tablePage.Values.Select(t => t.Name));