/// <summary>
        /// Generate constraint description for a normal class property
        /// </summary>
        /// <param name="classProp"></param>
        /// <returns></returns>
        public static string SchemaConstraintsClassProp(ClassProperty classProp)
        {
            if (classProp.ConstraintInfo.Length == 0)
            {
                return "";
            }

            string line = classProp.TableAttr + ": ";
            if (classProp.Type != "")
            {
                line += "It's type is " + classProp.Type + ". ";
            }
            if (classProp.ConstraintInfo != "")
            {
                line += classProp.ConstraintInfo + ".";
            }
            return line;
        }
        /// <summary>
        /// Given the mapping file name,
        /// Return all properties (excluding pk)
        /// </summary>
        /// <param name="classEle"></param>
        /// <param name="classFullName"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        private List<ClassProperty> _GetMappingFilePropertyList(XElement classEle, string classFullName, string tableName)
        {
            List<ClassProperty> propList = new List<ClassProperty>();
            foreach (var subEle in classEle.Elements("property"))
            {
                string classProp = subEle.Attributes("name").SingleOrDefault().Value;
                //string tableProp = subEle.Attributes("column").SingleOrDefault().Value;
                string tableProp = classProp;
                string constraitInfo = "";
                if (subEle.Attributes("column").Count() != 0)
                {
                    tableProp = subEle.Attributes("column").SingleOrDefault().Value;
                    constraitInfo = DBConstraintExtractorXML.GetConstraintInfo(subEle);
                }
                else
                {
                    //tableProp = subEle.Descendants("column").SingleOrDefault().Attributes("name").SingleOrDefault().Value;
                    XElement colEle = subEle.Descendants("column").SingleOrDefault();
                    if (colEle != null)
                    {
                        XAttribute colNameAttr = colEle.Attributes("name").SingleOrDefault();
                        if (colNameAttr != null)
                        {
                            tableProp = colNameAttr.Value;
                        }
                        constraitInfo = DBConstraintExtractorXML.GetConstraintInfo(colEle);
                    }
                }

                string propType = "";
                XAttribute propAttr = subEle.Attributes("type").SingleOrDefault();
                if (propAttr != null)
                {
                    propType = propAttr.Value;
                }

                ClassProperty prop = new ClassProperty(classFullName + "." + classProp, tableName + "." + tableProp, propType, constraitInfo);
                propList.Add(prop);
            }
            return propList;
        }