/// <summary>
        /// 获取当前连接所有表集合
        /// </summary>
        /// <returns></returns>
        public static  List<TableContext> GetCurrentDatabaseAllTableContextList()
        {
            var list = new List<TableContext>();
            const string sql = @" SELECT name FROM sysobjects WHERE xtype ='u' order by name";

            var cmd = new SqlCommand(sql);

            using (var dataReader = _db.ExecuteReader(cmd))
            {
                // Processing code 
                while (dataReader.Read())
                {
                    var table = new TableContext();

                    table.TableName = dataReader.GetString(0);
                    table.ColumnList = GetColumnContextListByTableName(table.TableName);

                    list.Add(table);

                }
            }

            return list;
        }
        /// <summary>
        ///  Web层 列表页 aspx   .cs文件
        /// </summary>
        /// <param name="table"></param>
        void GeneratorWebProgramsListCs(TableContext table)
        {
            string templatePath = Path.Combine(GlobalContext.ApplicationStartPath, GlobalContext.WebProgramsListaspxCsTemplateUrl);

            //获取模板
            StringBuilder webProgramsListDesignerCsTemplate = Tools.GetTemplate(templatePath);

            var nameSpace = GlobalContext.Web + ".Programs." + GlobalContext.CurrentConfigNameSpace;

            //替换命名空间
            webProgramsListDesignerCsTemplate.Replace(GlobalContext.NameSpace, nameSpace);
            //替换类名
            webProgramsListDesignerCsTemplate.Replace(GlobalContext.TableName, table.TableName);
            //替换程序集名称
            webProgramsListDesignerCsTemplate.Replace(GlobalContext.DomainTag, GlobalContext.Domain);
            webProgramsListDesignerCsTemplate.Replace(GlobalContext.BllTag, GlobalContext.Bll);
            webProgramsListDesignerCsTemplate.Replace(GlobalContext.WebTag, GlobalContext.Web);

            //替换二级命名空间
            webProgramsListDesignerCsTemplate.Replace(GlobalContext.ConfigNameSpace, GlobalContext.CurrentConfigNameSpace);
            //替换主键
            var columnPk = table.ColumnList.FirstOrDefault(p => p.IsPk == true);
            if (columnPk != null)
            {
                webProgramsListDesignerCsTemplate.Replace(GlobalContext.PkName, columnPk.Name);
            }

            //替换搜索列表
            var strList = new StringBuilder();

            foreach (var column in table.ColumnList)
            {
                //是否基类部分
                if (column.Name == "CreateTime" || column.Name == "UpdateTime" || column.Name == "IsDelete" || column.Name == "CreateUser" || column.Name == "UpdateUser" || column.Name == "Version" || column.IsPk)
                {
                    continue;
                }
                strList.AppendLine("//" + column.NameDescription);
                strList.AppendLine("if (Request[\"" + column.Name + "\"] != null && !string.IsNullOrWhiteSpace(Request[\"" + column.Name + "\"]))");
                strList.AppendLine("{");

                if (column.DateType.Equals("int"))
                {
                    strList.AppendLine("WhereStr += \" and " + column.Name + " =\" + Request[\"" + column.Name + "\"];");
                }
                else if (column.DateType.Equals("varchar") || column.DateType.Equals("nvarchar"))
                {
                    strList.AppendLine("WhereStr += \" and " + column.Name + "  like '%\" + Request[\"" + column.Name + "\"]+\"%'\";");
                }

                strList.AppendLine("}");

                strList.AppendLine();
            }

            //替换属性列表
            webProgramsListDesignerCsTemplate.Replace(GlobalContext.PropertySearchListStr, strList.ToString());



            //写入文件的文件夹路径
            string fileWriterFolderPath = Path.Combine(GlobalContext.ApplicationStartPath + "\\CodeGenerator",
                                                 nameSpace.Replace('.', '\\'));

            var fileWriterFilePath = fileWriterFolderPath + "\\" + table.TableName + "List.aspx.cs";

            Tools.CheckDirectory(fileWriterFolderPath);

            Tools.WriterTemplateFile(webProgramsListDesignerCsTemplate, fileWriterFilePath);
        }
        /// <summary>
        ///  Web层 列表页 aspx   designer.cs文件
        /// </summary>
        /// <param name="table"></param>
        void GeneratorWebProgramsListDesignerCs(TableContext table)
        {
            string templatePath = Path.Combine(GlobalContext.ApplicationStartPath, GlobalContext.WebProgramsListaspxDesignerCsTemplateUrl);

            //获取模板
            StringBuilder webProgramsListDesignerCsTemplate = Tools.GetTemplate(templatePath);

            var nameSpace = GlobalContext.Web + ".Programs." + GlobalContext.CurrentConfigNameSpace;

            //替换命名空间
            webProgramsListDesignerCsTemplate.Replace(GlobalContext.NameSpace, nameSpace);
            //替换类名
            webProgramsListDesignerCsTemplate.Replace(GlobalContext.TableName, table.TableName);
            //替换程序集名称
            webProgramsListDesignerCsTemplate.Replace(GlobalContext.DomainTag, GlobalContext.Domain);
            webProgramsListDesignerCsTemplate.Replace(GlobalContext.BllTag, GlobalContext.Bll);
            webProgramsListDesignerCsTemplate.Replace(GlobalContext.WebTag, GlobalContext.Web);

            //替换二级命名空间
            webProgramsListDesignerCsTemplate.Replace(GlobalContext.ConfigNameSpace, GlobalContext.CurrentConfigNameSpace);

            //写入文件的文件夹路径
            string fileWriterFolderPath = Path.Combine(GlobalContext.ApplicationStartPath + "\\CodeGenerator",
                                                 nameSpace.Replace('.', '\\'));

            var fileWriterFilePath = fileWriterFolderPath + "\\" + table.TableName + "List.aspx.designer.cs";

            Tools.CheckDirectory(fileWriterFolderPath);

            Tools.WriterTemplateFile(webProgramsListDesignerCsTemplate, fileWriterFilePath);
        }
        /// <summary>
        /// 生成Web Ajax一般处理程序 cs文件
        /// </summary>
        /// <param name="table"></param>
        void GeneratorWebAjaxAshxcs(TableContext table)
        {
            string templatePath = Path.Combine(GlobalContext.ApplicationStartPath, GlobalContext.WebAjaxAshxCsTemplateUrl);

            //获取模板
            StringBuilder webAjaxAshxcsTemplate = Tools.GetTemplate(templatePath);

            var nameSpace = GlobalContext.Web + ".Ajax." + GlobalContext.CurrentConfigNameSpace;

            //替换命名空间
            webAjaxAshxcsTemplate.Replace(GlobalContext.NameSpace, nameSpace);
            //替换类名
            webAjaxAshxcsTemplate.Replace(GlobalContext.TableName, table.TableName);
            //替换程序集名称
            webAjaxAshxcsTemplate.Replace(GlobalContext.DomainTag, GlobalContext.Domain);
            webAjaxAshxcsTemplate.Replace(GlobalContext.BllTag, GlobalContext.Bll);
            webAjaxAshxcsTemplate.Replace(GlobalContext.WebTag, GlobalContext.Web);

            //替换二级命名空间
            webAjaxAshxcsTemplate.Replace(GlobalContext.ConfigNameSpace, GlobalContext.CurrentConfigNameSpace);

            //替换主键
            var columnPk = table.ColumnList.FirstOrDefault(p => p.IsPk == true);
            if (columnPk != null)
            {
                webAjaxAshxcsTemplate.Replace(GlobalContext.PkName, columnPk.Name);
            }

            //写入文件的文件夹路径
            string fileWriterFolderPath = Path.Combine(GlobalContext.ApplicationStartPath + "\\CodeGenerator",
                                                 nameSpace.Replace('.', '\\'));

            var fileWriterFilePath = fileWriterFolderPath + "\\" + table.TableName + "Service.ashx.cs";

            Tools.CheckDirectory(fileWriterFolderPath);

            Tools.WriterTemplateFile(webAjaxAshxcsTemplate, fileWriterFilePath);
        }
        /// <summary>
        /// 生成BLL BLL实现
        /// </summary>
        /// <param name="table"></param>
        void GeneratorBLLBLL(TableContext table)
        {
            string templatePath = Path.Combine(GlobalContext.ApplicationStartPath, GlobalContext.BllbllTemplateUrl);

            //获取模板
            StringBuilder daoIDaoTemplate = Tools.GetTemplate(templatePath);

            var nameSpace = GlobalContext.Bll + ".Impl." + GlobalContext.CurrentConfigNameSpace;

            //替换命名空间
            daoIDaoTemplate.Replace(GlobalContext.NameSpace, nameSpace);
            //替换类名
            daoIDaoTemplate.Replace(GlobalContext.TableName, table.TableName);
            //替换程序集名称
            daoIDaoTemplate.Replace(GlobalContext.DomainTag, GlobalContext.Domain);
            daoIDaoTemplate.Replace(GlobalContext.BllTag, GlobalContext.Bll);
            //替换二级命名空间
            daoIDaoTemplate.Replace(GlobalContext.ConfigNameSpace, GlobalContext.CurrentConfigNameSpace);

            //写入文件的文件夹路径
            string fileWriterFolderPath = Path.Combine(GlobalContext.ApplicationStartPath + "\\CodeGenerator",
                                                 nameSpace.Replace('.', '\\'));

            var fileWriterFilePath = fileWriterFolderPath + "\\" + table.TableName + "Manager.cs";

            Tools.CheckDirectory(fileWriterFolderPath);

            Tools.WriterTemplateFile(daoIDaoTemplate, fileWriterFilePath);
        }
        /// <summary>
        /// 生产Domain(类型模型) Xml(文件)
        /// </summary>
        /// <param name="table"></param>
        void GeneratorDomainXml(TableContext table)
        {
            string templatePath = Path.Combine(GlobalContext.ApplicationStartPath, GlobalContext.DomainXmlTemplateUrl);

            //获取模板
            StringBuilder domainXmlTemplate = Tools.GetTemplate(templatePath);

            var nameSpace = GlobalContext.Domain + ".Entities." + GlobalContext.CurrentConfigNameSpace;

            var nameSpaceEntity = GlobalContext.Domain + ".Mappings." + GlobalContext.CurrentConfigNameSpace;

            //替换命名空间
            domainXmlTemplate.Replace(GlobalContext.NameSpace, nameSpace);
            //替换类名
            domainXmlTemplate.Replace(GlobalContext.TableName, table.TableName);
            //替换程序集名称
            domainXmlTemplate.Replace(GlobalContext.DomainTag, GlobalContext.Domain);

            //替换属性列表

            var strList = new StringBuilder();

            foreach (var column in table.ColumnList)
            {
                //是否基类部分
                if (column.Name == "CreateTime" || column.Name == "UpdateTime" || column.Name == "IsDelete" || column.Name == "CreateUser" || column.Name == "UpdateUser" || column.Name == "Version")
                {
                    continue;
                }

                //检查是否为主键
                if (column.IsPk)
                {
                    domainXmlTemplate.Replace(GlobalContext.PkName, column.Name);
                    continue;
                }

                //length=\"36\"
                //not-null=\"true\"
                var row = "<property name=\"" + column.Name + "\" column=\"" + column.Name + "\" type=\"" + (column.DateType.Equals("int") ? "integer" : Tools.ConvertVSType(column.DateType).Name.ToLower()) + "\" {0} {1} />";
                var lengthStr = "";
                if (column.DateType.Equals("nvarchar") || column.DateType.Equals("varchar"))
                {
                    lengthStr = "length=\"" + column.Length + "\"";
                }

                var isNullStr = "";
                if (!column.IsNull)
                {
                    isNullStr = "not-null=\"true\"";
                }

                var rowFormat = string.Format(row, lengthStr, isNullStr);

                strList.AppendLine(rowFormat);
            }
            strList.AppendLine();

            //替换属性列表
            domainXmlTemplate.Replace(GlobalContext.ProPertyXmlList, strList.ToString());

            //写入文件的文件夹路径
            string fileWriterFolderPath = Path.Combine(GlobalContext.ApplicationStartPath + "\\CodeGenerator",
                                                 nameSpaceEntity.Replace('.', '\\'));

            var fileWriterFilePath = fileWriterFolderPath + "\\" + table.TableName + ".hbm.xml";

            Tools.CheckDirectory(fileWriterFolderPath);

            Tools.WriterTemplateFile(domainXmlTemplate, fileWriterFilePath);
        }
        /// <summary>
        /// 生成Domain(领域模型) Entity(实体类)
        /// </summary>
        /// <param name="table"></param>
        void GeneratorDomainEntity(TableContext table)
        {

            string templatePath = Path.Combine(GlobalContext.ApplicationStartPath, GlobalContext.DomainEntityTemplateUrl);

            //获取模板
            StringBuilder domainEntityTemplate = Tools.GetTemplate(templatePath);

            var nameSpace = GlobalContext.Domain + ".Entities." + GlobalContext.CurrentConfigNameSpace;

            //替换命名空间
            domainEntityTemplate.Replace(GlobalContext.NameSpace, nameSpace);
            //替换类名
            domainEntityTemplate.Replace(GlobalContext.TableName, table.TableName);
            //替换属性列表

            var strList = new StringBuilder();

            foreach (var column in table.ColumnList)
            {
                //是否基类部分
                if (column.Name == "CreateTime" || column.Name == "UpdateTime" || column.Name == "IsDelete" || column.Name == "CreateUser" || column.Name == "UpdateUser" || column.Name == "Version" || column.IsPk)
                {
                    continue;
                }
                strList.AppendLine("/// <summary>");
                strList.AppendLine("///" + column.NameDescription);
                strList.AppendLine("/// </summary>");
                strList.AppendLine("public virtual " + (column.DateType.Equals("int") ? "int" : Tools.ConvertVSType(column.DateType).Name.ToLower()) + " " + column.Name + " { get; set; }");
                strList.AppendLine();
            }

            //替换属性列表
            domainEntityTemplate.Replace(GlobalContext.ProPertyList, strList.ToString());

            //写入文件的文件夹路径
            string fileWriterFolderPath = Path.Combine(GlobalContext.ApplicationStartPath + "\\CodeGenerator",
                                                 nameSpace.Replace('.', '\\'));

            var fileWriterFilePath = fileWriterFolderPath + "\\" + table.TableName + ".cs";

            Tools.CheckDirectory(fileWriterFolderPath);

            Tools.WriterTemplateFile(domainEntityTemplate, fileWriterFilePath);

        }
        /// <summary>
        ///  Web层 Add页 aspx   .cs文件
        /// </summary>
        /// <param name="table"></param>
        void GeneratorWebProgramsAddAspx(TableContext table)
        {
            string templatePath = Path.Combine(GlobalContext.ApplicationStartPath, GlobalContext.WebProgramsAddaspxTemplateUrl);

            //获取模板
            StringBuilder webProgramsListAspxTemplate = Tools.GetTemplate(templatePath);

            var nameSpace = GlobalContext.Web + ".Programs." + GlobalContext.CurrentConfigNameSpace;

            //替换命名空间
            webProgramsListAspxTemplate.Replace(GlobalContext.NameSpace, nameSpace);
            //替换类名
            webProgramsListAspxTemplate.Replace(GlobalContext.TableName, table.TableName);
            //替换程序集名称
            webProgramsListAspxTemplate.Replace(GlobalContext.DomainTag, GlobalContext.Domain);
            webProgramsListAspxTemplate.Replace(GlobalContext.BllTag, GlobalContext.Bll);
            webProgramsListAspxTemplate.Replace(GlobalContext.WebTag, GlobalContext.Web);

            //替换二级命名空间
            webProgramsListAspxTemplate.Replace(GlobalContext.ConfigNameSpace, GlobalContext.CurrentConfigNameSpace);
            //替换主键
            var columnPk = table.ColumnList.FirstOrDefault(p => p.IsPk == true);
            if (columnPk != null)
            {
                webProgramsListAspxTemplate.Replace(GlobalContext.PkName, columnPk.Name);
            }

            //内容部分
            var strList = new StringBuilder();


            foreach (var column in table.ColumnList)
            {
                //是否基类部分
                if (column.Name == "CreateTime" || column.Name == "UpdateTime" || column.Name == "IsDelete" || column.Name == "CreateUser" || column.Name == "UpdateUser" || column.Name == "Version" || column.IsPk)
                {
                    continue;
                }

                //内容部分
                strList.AppendLine("        <div class=\"unit\">");
                strList.AppendLine("           <label>");
                strList.AppendLine("            " + column.NameDescription + ":</label>");
                if ((column.DateType.Equals("varchar") || column.DateType.Equals("nvarchar")) && column.Length >= 300)
                {
                    strList.AppendLine("<textarea type=\"text\" name=\"" + column.Name + "\" cols=\"30\" rows=\"4\"></textarea>");
                }
                else
                {
                    strList.AppendLine("            <input type=\"text\" name=\"" + column.Name + "\" size=\"30\" value=''  " + (column.IsNull ? "" : "class=\"required\" ") + " />");
                }

                strList.AppendLine("       </div>");


                strList.AppendLine();


            }

            //替换内容部分
            webProgramsListAspxTemplate.Replace(GlobalContext.ProPertyList, strList.ToString());

            //写入文件的文件夹路径
            string fileWriterFolderPath = Path.Combine(GlobalContext.ApplicationStartPath + "\\CodeGenerator",
                                                 nameSpace.Replace('.', '\\'));

            var fileWriterFilePath = fileWriterFolderPath + "\\" + table.TableName + "Add.aspx";

            Tools.CheckDirectory(fileWriterFolderPath);

            Tools.WriterTemplateFile(webProgramsListAspxTemplate, fileWriterFilePath);
        }
        /// <summary>
        ///  Web层 列表页 aspx   .cs文件
        /// </summary>
        /// <param name="table"></param>
        void GeneratorWebProgramsListAspx(TableContext table)
        {
            string templatePath = Path.Combine(GlobalContext.ApplicationStartPath, GlobalContext.WebProgramsListaspxTemplateUrl);

            //获取模板
            StringBuilder webProgramsListAspxTemplate = Tools.GetTemplate(templatePath);

            var nameSpace = GlobalContext.Web + ".Programs." + GlobalContext.CurrentConfigNameSpace;

            //替换命名空间
            webProgramsListAspxTemplate.Replace(GlobalContext.NameSpace, nameSpace);
            //替换类名
            webProgramsListAspxTemplate.Replace(GlobalContext.TableName, table.TableName);
            //替换程序集名称
            webProgramsListAspxTemplate.Replace(GlobalContext.DomainTag, GlobalContext.Domain);
            webProgramsListAspxTemplate.Replace(GlobalContext.BllTag, GlobalContext.Bll);
            webProgramsListAspxTemplate.Replace(GlobalContext.WebTag, GlobalContext.Web);

            //替换二级命名空间
            webProgramsListAspxTemplate.Replace(GlobalContext.ConfigNameSpace, GlobalContext.CurrentConfigNameSpace);
            //替换主键
            var columnPk = table.ColumnList.FirstOrDefault(p => p.IsPk == true);
            if (columnPk != null)
            {
                webProgramsListAspxTemplate.Replace(GlobalContext.PkName, columnPk.Name);
            }

            //替换搜索列表
            var strList = new StringBuilder();

            //表头部分
            var strTableHeaderListStr = new StringBuilder();

            //列表页内容部分
            var strTableContextListStr = new StringBuilder();

            foreach (var column in table.ColumnList)
            {
                //是否基类部分
                if (column.Name == "CreateTime" || column.Name == "UpdateTime" || column.Name == "IsDelete" || column.Name == "CreateUser" || column.Name == "UpdateUser" || column.Name == "Version" || column.IsPk)
                {
                    continue;
                }

                //查询部分
                strList.AppendLine("<td>");
                strList.AppendLine(column.NameDescription + "<input type=\"text\" name=\"" + column.Name +
                                   "\" value=\"<%=Request[\"" + column.Name + "\"] ?? string.Empty %>\" />");
                strList.AppendLine("</td>");

                strList.AppendLine();

                //表头部分
                strTableHeaderListStr.AppendLine("<th>");
                strTableHeaderListStr.AppendLine(column.NameDescription);
                strTableHeaderListStr.AppendLine("</th>");

                //表内容部分
                strTableContextListStr.AppendLine("<td>");
                strTableContextListStr.AppendLine("<%=model." + column.Name + " %>");
                strTableContextListStr.AppendLine("</td>");
            }

            //替换查询部分
            webProgramsListAspxTemplate.Replace(GlobalContext.PropertySearchListStr, strList.ToString());
            //表头部分
            webProgramsListAspxTemplate.Replace(GlobalContext.PropertyTabelHeaderListStr, strTableHeaderListStr.ToString());
            //内容部分
            webProgramsListAspxTemplate.Replace(GlobalContext.PropertyTabelContextListStr, strTableContextListStr.ToString());



            //写入文件的文件夹路径
            string fileWriterFolderPath = Path.Combine(GlobalContext.ApplicationStartPath + "\\CodeGenerator",
                                                 nameSpace.Replace('.', '\\'));

            var fileWriterFilePath = fileWriterFolderPath + "\\" + table.TableName + "List.aspx";

            Tools.CheckDirectory(fileWriterFolderPath);

            Tools.WriterTemplateFile(webProgramsListAspxTemplate, fileWriterFilePath);
        }