public async Task DeleteAsync(IPracticePlan practicePlan)
        {
            var partitionKey = PracticePlanEntity.GetPartitionKey();
            var rowKey       = PracticePlanEntity.GetRowKey(practicePlan);
            var cloudTable   = await this.cloudTableFactory.CreateAsync(PracticePlanTableName);

            var tableOperation = TableOperation.Retrieve(partitionKey, rowKey);
            var result         = await cloudTable.ExecuteAsync(tableOperation);

            if (result?.Result != null && result.Result is ITableEntity)
            {
                tableOperation = TableOperation.Delete((ITableEntity)result.Result);
                await cloudTable.ExecuteAsync(tableOperation);
            }
        }
        public async Task <IPracticePlan> UpsertAsync(IPracticePlan practicePlan)
        {
            var entity = new PracticePlanEntity
            {
                StartDate    = practicePlan.StartDate,
                Details      = practicePlan.Details,
                PartitionKey = PracticePlanEntity.GetPartitionKey(),
                RowKey       = PracticePlanEntity.GetRowKey(practicePlan)
            };

            var cloudTable = await this.cloudTableFactory.CreateAsync(PracticePlanTableName);

            var tableOperation = TableOperation.InsertOrMerge(entity);
            var result         = await cloudTable.ExecuteAsync(tableOperation);

            return(new PracticePlanDto((PracticePlanEntity)result.Result));
        }