/// <summary>
        /// Save a Device Rule to the server. This may be either a new rule or an update to an existing rule. 
        /// </summary>
        /// <param name="updateContainer"></param>
        /// <returns></returns>
        public async Task<TableStorageResponse<DeviceRule>> SaveDeviceRuleAsync(DeviceRule updatedRule)
        {
            DeviceRuleTableEntity incomingEntity = 
                new DeviceRuleTableEntity(updatedRule.DeviceID, updatedRule.RuleId)
            {
                DataField = updatedRule.DataField,
                Threshold = (double)updatedRule.Threshold,
                Enabled = updatedRule.EnabledState,
                RuleOutput = updatedRule.RuleOutput
            };
            
            if(!string.IsNullOrWhiteSpace(updatedRule.Etag))
            {
                incomingEntity.ETag = updatedRule.Etag;
            }

            TableStorageResponse<DeviceRule> result = 
                await AzureTableStorageHelper.DoTableInsertOrReplace<DeviceRule, DeviceRuleTableEntity>(incomingEntity, BuildRuleFromTableEntity, 
                _storageAccountConnectionString, _deviceRulesNormalizedTableName); 

            // Build up a new blob to push up
            List<DeviceRuleBlobEntity> blobList = await BuildBlobEntityListFromTableRows();
            await PersistRulesToBlobStorageAsync(blobList);

            return result;
        }
        private DeviceRule BuildRuleFromTableEntity(DeviceRuleTableEntity tableEntity)
        {
            if(tableEntity == null)
            {
                return null;
            }

            var updatedRule = new DeviceRule(tableEntity.RuleId)
            {
                DeviceID = tableEntity.DeviceId,
                DataField = tableEntity.DataField,
                Threshold = tableEntity.Threshold,
                EnabledState = tableEntity.Enabled,
                Operator = ">",
                RuleOutput = tableEntity.RuleOutput,
                Etag = tableEntity.ETag
            };

            return updatedRule;
        }
        private DeviceRuleTableEntity BuildTableEntityFromRule(DeviceRule incomingRule)
        {
            DeviceRuleTableEntity tableEntity =
                new DeviceRuleTableEntity(incomingRule.DeviceID, incomingRule.RuleId)
                {
                    DataField = incomingRule.DataField,
                    Threshold = (double)incomingRule.Threshold,
                    Enabled = incomingRule.EnabledState,
                    RuleOutput = incomingRule.RuleOutput
                };

            if (!string.IsNullOrWhiteSpace(incomingRule.Etag))
            {
                tableEntity.ETag = incomingRule.Etag;
            }

            return tableEntity;
        }