/// <summary>
        /// Method to remove an extended property from a table or column.
        /// </summary>
        /// <param name="model"></param>
        private void Remove(ExtendedPropertyModel model)
        {
            var connectionString = Request.Headers["connectionString"].FirstOrDefault();
            HttpRequires.IsNotNull(connectionString, "Ivnalid Connection");
            HttpRequires.IsNotNull(model, "Invalid Properties");

            var dalResponse = _propertyDal.DeleteProperty(model, connectionString);
            HttpAssert.Success(dalResponse);
        }
 /// <summary>
 /// Helper method to validate the property model before persistance.
 /// </summary>
 /// <param name="model"></param>
 private void ValidatePropertyModel(ExtendedPropertyModel model)
 {
     if (String.IsNullOrWhiteSpace(model.Name))
         throw new ArgumentException("Extended Propery Model requires a Name");
     else if (String.IsNullOrWhiteSpace(model.TableName))
     {
         throw new ArgumentException("Extended Property Model requires either a table name be specified");
     }
 }
        /// <summary>
        /// Method to delete an extended property from a sql server database object
        /// </summary>
        /// <param name="model">Model containing the data needed for the delete</param>
        /// <param name="connectionString">Connection string for connecting to the desired database</param>
        /// <returns></returns>
        public DalResponseModel DeleteProperty(ExtendedPropertyModel model, string connectionString)
        {
            try
            {
                using (var conn = new SqlConnection(connectionString))
                {
                    var parameters = new List<SqlParameter>
                    {
                        new SqlParameter("@pPropertyName", model.Name),
                        new SqlParameter("@pObjectName", model.TableName),
                        BuildColumnParam(model.ColumnName)
                    }; 

                    _dalHelper.Delete(new DalHelperModel
                    {
                        CommandText = SQL_TEMPLATE_REMOVE,
                        Connection = conn,
                        Parameters = parameters
                    });

                    return new DalResponseModel { HasError = false };
                }
            }
            catch (Exception ex)
            {
                return new DalResponseModel
                {
                    Exception = ex,
                    HasError = true
                };
            }
        }
        /// <summary>
        /// Method to add an extended property to a sql server database object
        /// </summary>
        /// <param name="model">Model containing the data needed to create the property</param>
        /// <param name="connectionString">Connection string for connecting to the desired database</param>
        /// <returns></returns>
        public DalResponseModel<bool> AddProperty(ExtendedPropertyModel model, string connectionString)
        {

            try
            {
                using (var conn = new SqlConnection(connectionString))
                {
                    var parameters = new List<SqlParameter>()
                    {
                        new SqlParameter("@pPropertyName", model.Name),
                        new SqlParameter("@pPropertyValue", model.Text),
                        new SqlParameter("@pSchema", model.SchemaName),
                        new SqlParameter("@pTableName", model.TableName),
                        BuildColumnParam(model.ColumnName)
                    };
                    
                    var result = _dalHelper.Insert(new DalHelperModel
                    {
                        CommandText = SQL_TEMPLATE_ADD,
                        Connection = conn,
                        Parameters = parameters
                    });

                    return new DalResponseModel<bool>
                    {
                        HasError = false,
                        Result = result > 0
                    };
                }
            }
            catch (Exception ex)
            {
                return new DalResponseModel<bool>
                {
                    Exception = ex,
                    HasError = true,
                    Result = default(bool)
                };
            }
        }
        /// <summary>
        /// Method to update an extended property of a table or column
        /// </summary>
        /// <param name="model"></param>
        private void Update(ExtendedPropertyModel model)
        {
            var connectionString = Request.Headers["connectionString"].FirstOrDefault();
            HttpRequires.IsNotNull(connectionString, "Invalid Connection");
            HttpRequires.IsNotNull(model, "Invalid Properties");

            //Using the sql server system procedures I had (for add and delete). Instead of an in
            // place update, the process is to first delete the existing property, and then add
            // the new values. To avoid a situation where the delete succeeds but the add fails, 
            // we use a transaction scope.
            using (var scope = new TransactionScope())
            {
                var deleteResp = _propertyDal.DeleteProperty(model, connectionString);
                var addResp = _propertyDal.AddProperty(model, connectionString);
                HttpAssert.Success(deleteResp);
                HttpAssert.Success(addResp);
                scope.Complete();
            }
        }