/// <summary>
        ///
        /// </summary>
        /// <param name="property"></param>
        /// <returns></returns>
        public static string GetParameterName(PropertyDescriptor property)
        {
            DbFieldAttribute attribute =
                property.Attributes[_TypeOf_Field] as DbFieldAttribute;

            if (attribute != null)
            {
                return(attribute.ParameterName);
            }
            throw ParameterNotExists(string.Format("for property: {0}", property.Name), property.GetType());
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <param name="parameterName"></param>
        /// <returns></returns>
        public static PropertyDescriptor FindPropertyByParameter(Type type, string parameterName)
        {
            DbFieldAttribute attribute = null;

            foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(type))
            {
                attribute = (DbFieldAttribute)property.Attributes[_TypeOf_Field];
                if (attribute != null && attribute.ParameterName == parameterName)
                {
                    return(property);
                }
            }
            throw ParameterNotExists(parameterName, type);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <param name="fieldName"></param>
        /// <returns></returns>
        public static PropertyDescriptor FindPropertyByField(Type type, string fieldName)
        {
            DbFieldAttribute attribute = null;

            fieldName = fieldName.ToLower();
            foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(type))
            {
                attribute = (DbFieldAttribute)property.Attributes[_TypeOf_Field];
                if (attribute != null && attribute.FieldName.ToLower() == fieldName)
                {
                    return(property);
                }
            }
            throw FieldNotExists(fieldName, type);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public static IList <string> GetAllParameters(Type type)
        {
            DbFieldAttribute attribute = null;
            List <string>    list      = new List <string>();

            foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(type))
            {
                attribute = property.Attributes[_TypeOf_Field] as DbFieldAttribute;
                if (attribute != null)
                {
                    list.Add(attribute.ParameterName);
                }
            }
            return(list);
        }