private void GeraMetodoGet(string NomeDaTabela, TrataNome tratanome, StreamWriter aFile, bool RetiraS)
        {
            aFile.Write("\n");

            aFile.Write("       public virtual IList<" +
                tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + "> Get" +
                tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + "()\n");
            aFile.Write("       {\n");

            aFile.Write("           using (ISession session = NHibernateHelper.OpenSession())\n");
            aFile.Write("           {\n");

            aFile.Write(@"               return (from " + tratanome.ConverteParaMinusculoERetiraUnderline(NomeDaTabela, RetiraS)
                + " in session.Linq<" +
                tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + ">()"
                + "\n \t\t\t\t\t  select " +
                tratanome.ConverteParaMinusculoERetiraUnderline(NomeDaTabela, RetiraS) + ").ToList();\n");
            aFile.Write("           }\n");
            aFile.Write("       }\n");
            aFile.Write("\n");

            aFile.Write("       public virtual IList<" +
                tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + "> Get" +
                tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + "(ISession session)\n");
            aFile.Write("       {\n");

            aFile.Write(@"          return (from " +
                tratanome.ConverteParaMinusculoERetiraUnderline(NomeDaTabela, RetiraS) + " in session.Linq<" +
                tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + ">()"
                + "\n \t\t\t\t  select " +
                tratanome.ConverteParaMinusculoERetiraUnderline(NomeDaTabela, RetiraS) + ").ToList();\n"); aFile.Write("       }\n");
            aFile.Write("\n");

            aFile.Write("\n");
        }
        public void GeraArquivo(ProgressBar progressBar, List<string> ListaTabelas)
        {
            ITabelasECampos tabelasECamposSqlServer = TabelaECamposFactoy.GetTabelasECampos(BancoDeDados);

            progressBar.Maximum = ListaTabelas.Count;

            string NomeAssembly = string.Empty;

            OpenFileDialog openFileDialog = new OpenFileDialog();

            openFileDialog.InitialDirectory = GerarArquivoCSharp.CaminhoInicial;
            openFileDialog.Filter = "csproj files (*.csproj)|*.csproj";
            openFileDialog.RestoreDirectory = true;
            string caminho;

            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {

                caminho = openFileDialog.FileName;

                string NomeDoArquivo = @"\" + openFileDialog.SafeFileName.ToString();
                string Nomenamespace = NomeDoArquivo.Substring(1, NomeDoArquivo.Length - 8);

                caminho = caminho.Substring(0, caminho.Length - (7 + Nomenamespace.Length));

                GerarArquivoCSharp.CaminhoInicial = caminho;

                DirectoryInfo diretorio = new DirectoryInfo(caminho + @"\DLL NHibernate");

                if (!diretorio.Exists)
                {
                    diretorio.Create();
                }

                string[] files = System.IO.Directory.GetFiles(Application.StartupPath + @"\DLL NHibernate");
                string fileName;
                string destFile;

                foreach (string s in files)
                {

                    fileName = System.IO.Path.GetFileName(s);
                    destFile = System.IO.Path.Combine(caminho + @"\DLL NHibernate", fileName);
                    System.IO.File.Copy(s, destFile, true);
                }

                string caminhoEntidades = caminho + @"\Entidades";
                string caminhoMapeamentos = caminho + @"\Mapeamentos";
                string caminhoConexao = caminho + @"\Conexao";
                string caminhoRepositorios = caminho + @"\Repositorios";
                string caminhoGeral = caminho + @"\Geral";
                string caminhoNHibernateHelp = caminho + @"\NHibernateHelper";

                IncluirDLLNoProjeto(caminho + NomeDoArquivo);
                if (this.GeraNHibernateHelper)
                {
                    this.ClasseNHibernateHelp(Nomenamespace, caminhoNHibernateHelp);
                    this.IncluirArquivoNoProjeto(caminho + NomeDoArquivo, @"NHibernateHelper\" + "NHibernateHelper.cs", true, "Compile", ref NomeAssembly);

                    this.GeraArquivoXMLDeConfigNHibernate(Nomenamespace, caminho, this.RetiraS, ListaTabelas);
                    this.IncluirArquivoNoProjeto(caminho + NomeDoArquivo, "hibernate.cfg.xml", true, "Content", ref NomeAssembly);
                }

                TrataNome tratanome = new TrataNome();
                foreach (string tabela in ListaTabelas)
                {
                    if (this.GeraEntidades)
                    {
                        //Gera os arquivos de class
                        this.GeraArquivoEntidades(Nomenamespace, caminhoEntidades, tabela, this.RetiraS, this.PropriedadesAutomaticas);
                        //Incluir os arquivos no projeto
                        this.IncluirArquivoNoProjeto(caminho + NomeDoArquivo,
                            @"Entidades\" + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabela, this.RetiraS) + ".cs", this.GeraEntidades, "Compile", ref NomeAssembly);
                        this.GeraArquivoXMLDaEntidades(Nomenamespace, caminhoMapeamentos, tabela, this.Lazy, NomeAssembly, this.RetiraS);
                        this.IncluirArquivoNoProjeto(caminho + NomeDoArquivo,
                            @"Mapeamentos\" + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabela, this.RetiraS) + ".hbm.xml", this.GeraEntidades, "EmbeddedResource", ref NomeAssembly);
                    }

                    if (this.GeraclassesRepositorio)
                    {
                        this.IncluirArquivoNoProjeto(caminho + NomeDoArquivo,
                            @"Repositorios\" + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabela, this.RetiraS) + "Repositorios.cs", this.GeraclassesRepositorio, "Compile", ref NomeAssembly);
                        this.GeraArquivosRepositorios(Nomenamespace, caminhoRepositorios, tabela, this.RetiraS);
                    }
                    progressBar.Value += 1;
                }
                MessageBox.Show("Operação Realizada com Sucesso!", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }

            progressBar.Value = 0;
        }
        private void GeraMetodoDeletar(string NomeDaTabela, TrataNome tratanome, StreamWriter aFile, bool RetiraS)
        {
            aFile.Write("       public virtual void Delete(" + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + " " +
                tratanome.ConverteParaMinusculoERetiraUnderline(NomeDaTabela, RetiraS) + ")\n");
            aFile.Write("       {\n");
            aFile.Write("           using (ISession session = NHibernateHelper.OpenSession())\n");
            aFile.Write("           {\n");
            aFile.Write("               using (ITransaction transaction = session.BeginTransaction())\n");
            aFile.Write("               {\n");
            aFile.Write("                   try\n");
            aFile.Write("                   {\n");
            aFile.Write("                       session.Delete(" + tratanome.ConverteParaMinusculoERetiraUnderline(NomeDaTabela, RetiraS) + ");\n");
            aFile.Write("                       transaction.Commit();\n");
            aFile.Write("                       session.Flush();\n");
            aFile.Write("                       session.Close();\n");
            aFile.Write("                   }\n");
            aFile.Write("                   catch (NHibernate.HibernateException)\n");
            aFile.Write("                   {\n");
            aFile.Write("                       transaction.Rollback();\n");
            aFile.Write("                   }\n");
            aFile.Write("               }\n");
            aFile.Write("           }\n");
            aFile.Write("       }\n");
            aFile.Write("\n");

            aFile.Write("       public virtual void Delete(" + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + " " +
                tratanome.ConverteParaMinusculoERetiraUnderline(NomeDaTabela, RetiraS) + ", ISession session)\n");
            aFile.Write("       {\n");
            aFile.Write("           session.Delete(" + tratanome.ConverteParaMinusculoERetiraUnderline(NomeDaTabela, RetiraS) + ");\n");
            aFile.Write("       }\n");
            aFile.Write("\n");
        }
        private void GeraConstrutores(string NomeDaTabela, TrataNome tratanome, ITabelasECampos tabelasecampos, List<string> Listacampos, StreamWriter aFile, bool RetiraS)
        {
            aFile.Write("\n");
            aFile.Write("        public " + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + "()\n");
            aFile.Write("        {\n");
            aFile.Write("        }\n\n");

            aFile.Write("        public " + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + "(");
            string linha = string.Empty;
            var count = tabelasecampos.CamposChavesDaTabela(NomeDaTabela).Count;
            bool verificaparametro = true;
            bool verificathis = true;
            foreach (string campo in Listacampos)
            {
                if (count > 1 && verificaparametro)
                {
                    linha += "PK Pk, ";

                    verificaparametro = false;
                }

                if (count == 1 || !tabelasecampos.CampoChavesDaTabela(NomeDaTabela, campo))
                {

                    if (tabelasecampos.NomeDaTabelaDaChaveEstrgeira(NomeDaTabela, campo) != "NULL")
                    {
                        linha += tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabelasecampos.NomeDaTabelaDaChaveEstrgeira(NomeDaTabela, campo), RetiraS)
                            + " " + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(campo, RetiraS) + ", ";
                    }
                    else
                    {
                        linha += tabelasecampos.TipoDadoCSharp(NomeDaTabela, campo) + " " + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(campo, RetiraS) + ", ";
                    }
                }

            }

            linha = linha.Substring(0, linha.Length - 2);
            aFile.Write(linha);
            aFile.Write(")\n");
            aFile.Write("        {\n");

            foreach (string campo in Listacampos)
            {

                if (count > 1 && verificathis)
                {
                    aFile.Write("            this.Pk = Pk;\n");

                    verificathis = false;
                }

                if (count == 1 || !tabelasecampos.CampoChavesDaTabela(NomeDaTabela, campo))
                {

                    aFile.Write("            this." + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(campo, RetiraS) +
                        " = " + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(campo, RetiraS) + ";\n");
                }
            }

            aFile.Write("        }");

            aFile.Write("\n");
        }
        private void GeraGetSet(string NomeDaTabela, TrataNome tratanome, ITabelasECampos tabelasecampos, List<string> Listacampos, StreamWriter aFile, bool RetiraS, bool PropriedadesAutomaticas)
        {
            aFile.Write("\n");
            var count = tabelasecampos.CamposChavesDaTabela(NomeDaTabela).Count;
            if (count > 1)
            {
                aFile.Write("\t\tpublic virtual PK Pk");
                if (!PropriedadesAutomaticas)
                {
                    aFile.Write("\n");
                    aFile.WriteLine("\t\t{");
                    aFile.WriteLine("\t\t\tget { return this.pk; }");
                    aFile.WriteLine("\t\t\tset { pk = value; }");
                    aFile.WriteLine("\t\t}");
                    aFile.Write("\n");
                }
                else
                {
                    aFile.Write(" { get; set; }\n");
                }
            }

            foreach (string campos in Listacampos)
            {
                if (count == 1 || !tabelasecampos.CampoChavesDaTabela(NomeDaTabela, campos))
                {
                    string linha;
                    if (tabelasecampos.NomeDaTabelaDaChaveEstrgeira(NomeDaTabela, campos) != "NULL")
                    {
                        linha = "        public virtual " + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabelasecampos.NomeDaTabelaDaChaveEstrgeira(NomeDaTabela, campos), RetiraS) +
                            " " + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(campos.ToLower(), RetiraS);
                        aFile.Write(linha);
                        if (!PropriedadesAutomaticas)
                        {
                            aFile.Write("\n");
                            aFile.Write("        {\n");
                            aFile.Write("            get{ return this." + tratanome.ConverteParaMinusculoERetiraUnderline(campos.ToLower(), RetiraS) + "; }\n");
                            aFile.Write("            set{ this." + tratanome.ConverteParaMinusculoERetiraUnderline(campos.ToLower(), RetiraS) + " = value; }\n");
                            aFile.Write("        }\n");
                            aFile.Write("\n");
                        }
                        else
                        {
                            aFile.Write(" { get; set; }\n");

                        }

                    }
                    else
                    {

                        linha = "        public virtual " + tabelasecampos.TipoDadoCSharp(NomeDaTabela, campos) +
                            " " + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(campos.ToLower(), RetiraS);
                        aFile.Write(linha);
                        if (!PropriedadesAutomaticas)
                        {
                            aFile.Write("\n");
                            aFile.Write("        {\n");
                            aFile.Write("            get{ return this." + tratanome.ConverteParaMinusculoERetiraUnderline(campos.ToLower(), RetiraS) + "; }\n");
                            aFile.Write("            set{ this." + tratanome.ConverteParaMinusculoERetiraUnderline(campos.ToLower(), RetiraS) + " = value; }\n");
                            aFile.Write("        }\n");
                            aFile.Write("\n");
                        }
                        else
                        {
                            aFile.Write(" { get; set; }\n");

                        }
                    }

                }

            }
            string nomedatabelapassou = string.Empty;
            int i = 0;
            foreach (string tabela in tabelasecampos.TabelasOndeARelacionamento(NomeDaTabela))
            {
                if (nomedatabelapassou == tabela)
                {
                    i += 1;
                    nomedatabelapassou = tabela;
                }
                else
                {
                    i = 0;
                    nomedatabelapassou = tabela;
                }
                if (i > 0)
                {

                    aFile.Write("        public virtual IList<" + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabela, RetiraS) +
                         "> " + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabelasecampos.CamposChavesEstrageiraDaTabela(tabela)[i], RetiraS) + "List");

                    if (!PropriedadesAutomaticas)
                    {
                        aFile.Write("\n");
                        aFile.Write("        {\n");
                        aFile.Write("            get{ return this." + tratanome.ConverteParaMinusculoERetiraUnderline(tabelasecampos.CamposChavesEstrageiraDaTabela(tabela)[i], RetiraS) + "List; }\n");
                        aFile.Write("            set{ this." + tratanome.ConverteParaMinusculoERetiraUnderline(tabelasecampos.CamposChavesEstrageiraDaTabela(tabela)[i], RetiraS) + "List = value; }\n");
                        aFile.Write("        }\n");
                        aFile.Write("\n");
                    }
                    else
                    {
                        aFile.Write(" { get; set; }\n");

                    }

                }
                else
                {

                    aFile.Write("        public virtual IList<" + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabela, RetiraS) +
                    "> " + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabela, RetiraS) + "List");
                    if (!PropriedadesAutomaticas)
                    {
                        aFile.Write("\n");
                        aFile.Write("        {\n");
                        aFile.Write("            get{ return this." + tratanome.ConverteParaMinusculoERetiraUnderline(tabela, RetiraS) + "List; }\n");
                        aFile.Write("            set{ this." + tratanome.ConverteParaMinusculoERetiraUnderline(tabela, RetiraS) + "List = value; }\n");
                        aFile.Write("        }\n");
                        aFile.Write("\n");
                    }
                    else
                    {
                        aFile.Write(" { get; set; }\n");

                    }

                }

            }

            aFile.Write("\n");
        }
        private void GeraArquivoXMLDeConfigNHibernate(string NomeNamespace, string caminho, bool RetiraS, List<string> ListaTabelas)
        {
            TrataNome tratanome = new TrataNome();
            ITabelasECampos tabelasecampos = TabelaECamposFactoy.GetTabelasECampos(BancoDeDados);

            DirectoryInfo diretorio = new DirectoryInfo(caminho);

            if (!diretorio.Exists)
            {
                diretorio.Create();
            }

            StreamWriter aFile = new StreamWriter(caminho + "\\hibernate.cfg.xml", false, Encoding.ASCII);

            aFile.WriteLine("<?xml version=\"1.0\"?>");
            aFile.WriteLine("<hibernate-configuration xmlns=\"urn:nhibernate-configuration-2.2\">");
            aFile.WriteLine("\t<session-factory>");
            aFile.WriteLine("");
            aFile.WriteLine("\t<!-- configurations -->");

            aFile.WriteLine("\t\t<property name=\"connection.provider\">NHibernate.Connection.DriverConnectionProvider</property>");
            aFile.WriteLine("\t\t<property name=\"dialect\">" + tabelasecampos.DialectDoBancodeDados() + "</property>");
            aFile.WriteLine("\t\t<property name=\"connection.driver_class\">" + tabelasecampos.ConnectionDriver() + "</property>");
            aFile.WriteLine("\t\t<property name=\"connection.connection_string\">" + StringConexao.Stringconexao + "</property>");
            aFile.WriteLine("\t\t<property name=\"proxyfactory.factory_class\">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>");
            aFile.WriteLine("\t\t<property name=\"show_sql\">true</property>");
            aFile.WriteLine("");
            aFile.WriteLine("\t<!-- mapping files -->");

            foreach (string tabelas in ListaTabelas)
            {
                if (tabelasecampos.CamposChavesDaTabela(tabelas).Count > 0)
                {

                    aFile.WriteLine("\t\t<mapping resource=\"" + NomeNamespace + ".Mapeamentos." +
                        tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabelas, RetiraS) + ".hbm.xml\" assembly=\"" +
                        NomeNamespace + "\"/>");
                }
            }

            aFile.WriteLine("");
            aFile.WriteLine("</session-factory>");
            aFile.WriteLine("</hibernate-configuration>");
            aFile.Close();
        }
        private void GeraClassePK(string NomeDaTabela, TrataNome tratanome, ITabelasECampos tabelasecampos, StreamWriter aFile, bool RetiraS, bool PropriedadesAutomaticas)
        {
            aFile.WriteLine("\t\t[Serializable]");
            aFile.WriteLine("\t\tpublic class PK");
            aFile.WriteLine("\t\t{");
            string linha = string.Empty;
            if (!PropriedadesAutomaticas)
            {
                foreach (string campos in tabelasecampos.CamposChavesDaTabela(NomeDaTabela))
                {
                    if (tabelasecampos.NomeDaTabelaDaChaveEstrgeira(NomeDaTabela, campos) != "NULL")
                    {

                        linha = "\t\t\tprivate " + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabelasecampos.NomeDaTabelaDaChaveEstrgeira(NomeDaTabela, campos), RetiraS) +
                           " " + tratanome.ConverteParaMinusculoERetiraUnderline(campos.ToLower(), RetiraS) + ";\n";
                    }
                    else
                    {
                        linha = "\t\t\tprivate " + tabelasecampos.TipoDadoCSharp(NomeDaTabela, campos) +
                           " " + tratanome.ConverteParaMinusculoERetiraUnderline(campos.ToLower(), RetiraS) + ";\n";
                    }
                    aFile.Write(linha);
                }
                aFile.Write("\n");
            }

            //Contrutores

            aFile.Write("\t        public PK()\n");
            aFile.Write("\t        {\n");
            aFile.Write("\t        }\n\n");

            aFile.Write("\t        public PK(");
            linha = string.Empty;
            foreach (string campo in tabelasecampos.CamposChavesDaTabela(NomeDaTabela))
            {

                if (tabelasecampos.NomeDaTabelaDaChaveEstrgeira(NomeDaTabela, campo) != "NULL")
                {
                    linha += tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabelasecampos.NomeDaTabelaDaChaveEstrgeira(NomeDaTabela, campo), RetiraS)
                        + " " + tratanome.ConverteParaMinusculoERetiraUnderline(campo, RetiraS) + ", ";
                }
                else
                {
                    linha += tabelasecampos.TipoDadoCSharp(NomeDaTabela, campo) + " " + tratanome.ConverteParaMinusculoERetiraUnderline(campo, RetiraS) + ", ";
                }

            }

            linha = linha.Substring(0, linha.Length - 2);
            aFile.Write(linha);
            aFile.Write(")\n");
            aFile.Write("\t        {\n");

            foreach (string campo in tabelasecampos.CamposChavesDaTabela(NomeDaTabela))
            {
                aFile.Write("\t            this." + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(campo, RetiraS) +
                       " = " + tratanome.ConverteParaMinusculoERetiraUnderline(campo, RetiraS) + ";\n");
            }

            aFile.Write("\t        }\n\n");

            linha = string.Empty;
            foreach (string campos in tabelasecampos.CamposChavesDaTabela(NomeDaTabela))
            {
                if (tabelasecampos.NomeDaTabelaDaChaveEstrgeira(NomeDaTabela, campos) != "NULL")
                {
                    linha = "\t        public virtual " + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabelasecampos.NomeDaTabelaDaChaveEstrgeira(NomeDaTabela, campos), RetiraS) +
                        " " + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(campos.ToLower(), RetiraS);
                    aFile.Write(linha);
                    if (!PropriedadesAutomaticas)
                    {
                        aFile.Write("\n");
                        aFile.Write("\t        {\n");
                        aFile.Write("\t            get{ return this." + tratanome.ConverteParaMinusculoERetiraUnderline(campos.ToLower(), RetiraS) + "; }\n");
                        aFile.Write("\t            set{ this." + tratanome.ConverteParaMinusculoERetiraUnderline(campos.ToLower(), RetiraS) + " = value; }\n");
                        aFile.Write("\t        }\n");
                        aFile.Write("\n");
                    }
                    else
                    {
                        aFile.Write(" { get; set; }\n");
                    }

                }
                else
                {

                    linha = "\t        public virtual " + tabelasecampos.TipoDadoCSharp(NomeDaTabela, campos) +
                        " " + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(campos.ToLower(), RetiraS);
                    aFile.Write(linha);
                    if (!PropriedadesAutomaticas)
                    {
                        aFile.Write("\n");
                        aFile.Write("\t        {\n");
                        aFile.Write("\t            get{ return this." + tratanome.ConverteParaMinusculoERetiraUnderline(campos.ToLower(), RetiraS) + "; }\n");
                        aFile.Write("\t            set{ this." + tratanome.ConverteParaMinusculoERetiraUnderline(campos.ToLower(), RetiraS) + " = value; }\n");
                        aFile.Write("\t        }\n");
                        aFile.Write("\n");
                    }
                    else
                    {
                        aFile.Write(" { get; set; }\n");
                    }

                }

            }
            aFile.Write("\n\n");
            aFile.WriteLine("\t\t\tpublic override bool Equals(object obj)");
            aFile.WriteLine("\t\t\t{");
            aFile.WriteLine("\t\t\t    return base.Equals(obj);");
            aFile.WriteLine("\t\t\t}\n");
            aFile.WriteLine("\t\t\tpublic override int GetHashCode()");
            aFile.WriteLine("\t\t\t{");
            aFile.WriteLine("\t\t\t    return base.GetHashCode();");
            aFile.WriteLine("\t\t\t}\n");
            aFile.WriteLine("\t\t}\n");
        }
        private void GeraArquivoXMLDaEntidades(string NomeNamespace, string caminho, string NomeDaTabela, string Lazy, string NomeAssembly, bool RetiraS)
        {
            TrataNome tratanome = new TrataNome();
            ITabelasECampos tabelasecampos = TabelaECamposFactoy.GetTabelasECampos(BancoDeDados);

            List<string> Listacampos = tabelasecampos.CamposDaTabela(NomeDaTabela);
            DirectoryInfo diretorio = new DirectoryInfo(caminho);

            if (!diretorio.Exists)
            {
                diretorio.Create();
            }

            StreamWriter aFile = new StreamWriter(caminho + "\\" + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + ".hbm.xml", false, Encoding.ASCII);
            //duas variaveis
            //para o nome da tabela e campos
            //o sql server aceita nome de campos e tabelas separados
            //por isso o careter especial sqlserver [nome da tabela]
            string Abre = string.Empty;
            string Fecha = string.Empty;
            if (BancoDeDados == TiposDeBancoDeDados.SQLSERVER)
            {
                Abre = "[";
                Fecha = "]";
            }

            aFile.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
            aFile.WriteLine("<hibernate-mapping xmlns=\"urn:nhibernate-mapping-2.2\" auto-import=\"true\">");
            aFile.WriteLine("\t<class name=\"" + NomeNamespace + "." + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS)
                + ", " + NomeAssembly + "\" table=\"" + Abre + NomeDaTabela + Fecha + "\" lazy=\"" + Lazy + "\">");
            aFile.WriteLine("");
            //para carantir que id venha primeiro no xml
            string ID = string.Empty;
            string Property = string.Empty;
            int count = 0;
            foreach (string campos in Listacampos)
            {

                if (tabelasecampos.CampoChavesDaTabela(NomeDaTabela, campos))
                {
                    if (tabelasecampos.CamposChavesDaTabela(NomeDaTabela).Count == 1)
                    {

                        if (tabelasecampos.TipoDadoCSharp(NomeDaTabela, campos) == "string")
                        {
                            ID += "\t\t<id name=\"" +
                                tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(campos, RetiraS) + "\" column= \"" + Abre + campos + Fecha +
                                "\" type=\"String\" length=\"" + tabelasecampos.TamanhodoCamposString(NomeDaTabela, campos) + "\">\n";
                        }
                        else
                        {
                            ID += "\t\t<id name=\"" +
                                tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(campos, RetiraS) + "\" column= \"" + Abre + campos + Fecha +
                                "\" type=\"" + tabelasecampos.TipoDadoCSharp(NomeDaTabela, campos) + "\">\n";

                        }

                        if (tabelasecampos.CamposIdentityDaTabela(NomeDaTabela, campos))
                        {
                            ID += "\t\t\t<generator class=\"native\" />\n";
                        }
                        else
                        {
                            ID += "\t\t\t<generator class=\"assigned\" />\n";

                        }
                        ID += "\t\t</id>\n\n";
                    }
                    else
                    {

                        if (count == 0)
                        {
                            ID += "\t\t<composite-id name=\"Pk\" class=\"" + NomeNamespace + "." + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS)
                                + "+PK, " + NomeNamespace + "\">\n";
                        }
                        count++;

                        //
                        if (tabelasecampos.NomeDaTabelaDaChaveEstrgeira(NomeDaTabela, campos) != "NULL")
                        {

                            ID += "\t\t\t<key-many-to-one name=\"" +
                                tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(campos, RetiraS) + "\" column= \"" + Abre + campos + Fecha +
                                "\" class=\"" + NomeNamespace + "." + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabelasecampos.NomeDaTabelaDaChaveEstrgeira(NomeDaTabela, campos), RetiraS) + ", " + NomeNamespace + "\"/>\n";

                        }
                        else
                        {
                            if (tabelasecampos.TipoDadoCSharp(NomeDaTabela, campos) == "string")
                            {
                                ID += "\t\t\t<key-property name=\"" +
                                    tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(campos, RetiraS) + "\" column= \"" + Abre + campos + Fecha +
                                    "\" type=\"String\" length=\"" + tabelasecampos.TamanhodoCamposString(NomeDaTabela, campos) + "\"/>\n";
                            }
                            else
                            {
                                ID += "\t\t\t<key-property name=\"" +
                                    tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(campos, RetiraS) + "\" column= \"" + Abre + campos + Fecha +
                                    "\" type=\"" + tabelasecampos.TipoDadoCSharp(NomeDaTabela, campos) + "\"/>\n";

                            }
                        }

                        if (tabelasecampos.CamposChavesDaTabela(NomeDaTabela).Count == count)
                        {
                            ID += "\t\t</composite-id>\n\n";
                        }
                    }

                }
                else//fim do ID
                {

                    if (tabelasecampos.NomeDaTabelaDaChaveEstrgeira(NomeDaTabela, campos) != "NULL")
                    {

                        Property += "\t\t<many-to-one name=\"" +
                            tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(campos, RetiraS) + "\" column= \"" + Abre + campos + Fecha +
                            "\" class=\"" + NomeNamespace + "." + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabelasecampos.NomeDaTabelaDaChaveEstrgeira(NomeDaTabela, campos), RetiraS)
                            + ", " + NomeNamespace + "\" not-null=\"" +
                        tabelasecampos.CampoOBrigatorio(NomeDaTabela, campos).ToString().ToLower() + "\"/>\n";

                    }
                    else
                    {
                        if (tabelasecampos.TipoDadoCSharp(NomeDaTabela, campos) == "string")
                        {
                            Property += "\t\t<property name=\"" +
                                tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(campos, RetiraS) + "\" column= \"" + Abre + campos + Fecha +
                                "\" type=\"String\" length=\"" + tabelasecampos.TamanhodoCamposString(NomeDaTabela, campos) + "\" not-null=\"" +
                                tabelasecampos.CampoOBrigatorio(NomeDaTabela, campos).ToString().ToLower() + "\"/>\n";
                        }
                        else
                        {
                            if (tabelasecampos.TipoDadoCSharp(NomeDaTabela, campos) == "byte[]")
                            {
                                Property += "\t\t<property name=\"" +
                                    tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(campos, RetiraS) + "\" column= \"" + Abre + campos + Fecha +
                                    "\" type=\"BinaryBlob\" not-null=\"" +
                                tabelasecampos.CampoOBrigatorio(NomeDaTabela, campos).ToString().ToLower() + "\"/>\n";

                            }
                            else
                            {
                                Property += "\t\t<property name=\"" +
                                    tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(campos, RetiraS) + "\" column= \"" + Abre + campos + Fecha +
                                    "\" type=\"" + tabelasecampos.TipoDadoCSharp(NomeDaTabela, campos) + "\" not-null=\"" +
                                tabelasecampos.CampoOBrigatorio(NomeDaTabela, campos).ToString().ToLower() + "\"/>\n";

                            }
                        }
                    }
                }
            }

            aFile.Write(ID);
            aFile.Write(Property);

            aFile.WriteLine("");
            string nomedatabelapassou = string.Empty;
            int i = 0;
            foreach (string tabela in tabelasecampos.TabelasOndeARelacionamento(NomeDaTabela))
            {

                if (nomedatabelapassou == tabela)
                {
                    i += 1;
                    nomedatabelapassou = tabela;
                }
                else
                {
                    i = 0;
                    nomedatabelapassou = tabela;
                }

                if (i > 0)
                {
                    aFile.Write("\t\t<bag name=\"" + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabelasecampos.CamposChavesEstrageiraDaTabela(tabela)[i], RetiraS) + "List\"");
                    aFile.Write(" inverse=\"true\"");
                    aFile.Write(" lazy=\"" + Lazy + "\"");
                    aFile.Write(" cascade=\"all\">\n");
                    aFile.WriteLine("\t\t\t<key column=\"" + Abre + tabelasecampos.CamposChavesEstrageiraDaTabela(tabela)[i] + Fecha + "\"/>");
                    aFile.WriteLine("\t\t\t<one-to-many class=\""
                        + NomeNamespace + "." + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabela, RetiraS) + "\"/>");
                    aFile.WriteLine("\t\t</bag>");
                }
                else
                {

                    aFile.Write("\t\t<bag name=\"" + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabela, RetiraS) + "List\"");
                    aFile.Write(" inverse=\"true\"");
                    aFile.Write(" lazy=\"" + Lazy + "\"");
                    aFile.Write(" cascade=\"all\">\n");
                    aFile.WriteLine("\t\t\t<key column=\"" + Abre + tabelasecampos.CamposChavesEstrageiraDaTabela(tabela)[i] + Fecha + "\"/>");
                    aFile.WriteLine("\t\t\t<one-to-many class=\""
                        + NomeNamespace + "." + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabela, RetiraS) + "\"/>");
                    aFile.WriteLine("\t\t</bag>");
                }

            }

            aFile.WriteLine("");
            aFile.WriteLine("</class>");
            aFile.WriteLine("</hibernate-mapping>");
            aFile.Close();
        }
        private void GeraArquivosRepositorios(string NomeNamespace, string caminho, string NomeDaTabela, bool RetiraS)
        {
            TrataNome tratanome = new TrataNome();
            ITabelasECampos tabelasecampos = TabelaECamposFactoy.GetTabelasECampos(BancoDeDados);

            DirectoryInfo diretorio = new DirectoryInfo(caminho);

            if (!diretorio.Exists)
            {
                diretorio.Create();
            }
            StreamWriter aFile = new StreamWriter(caminho + "\\" + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + "Repositorios.cs", false, Encoding.ASCII);

            GeraUsing(aFile);
            aFile.Write("using System.Data.SqlClient;\n");
            aFile.Write("using System.Collections.Generic;\n");
            aFile.Write("using System.Collections;\n");
            aFile.Write("using NHibernate;\n");
            aFile.Write("using System.Linq;\n");
            aFile.Write("using NHibernate.Linq;\n\n");

            aFile.Write("\n");
            aFile.Write("namespace " + NomeNamespace + "\n");
            aFile.Write("{\n");
            aFile.Write("    public class " + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + "Repositorios \n");
            aFile.Write("    {\n\n");

            /*Método responsalver por gera o salvar
             **/
            this.GeraMetodoSalvar(NomeDaTabela, tratanome, aFile, RetiraS);

            if (!string.IsNullOrEmpty(tabelasecampos.CampoChavesDaTabela(NomeDaTabela)))
            {

                /*Método responsalver por gera o atualizar
                **/
                this.GeraMetodoAtualizar(NomeDaTabela, tratanome, aFile, RetiraS);

                /*Método responsalver por gera o deletar
                **/
                this.GeraMetodoDeletar(NomeDaTabela, tratanome, aFile, RetiraS);

                /*Método responsalver por gera get
                **/
                this.GeraMetodoGetKey(NomeDaTabela, tratanome, tabelasecampos, aFile, RetiraS);
            }
            this.GeraMetodoGet(NomeDaTabela, tratanome, aFile, RetiraS);

            aFile.Write("    }\n");
            aFile.Write("}\n");

            aFile.Close();
        }
        private void GeraArquivoEntidades(string NomeNamespace, string caminho, string NomeDaTabela, bool RetiraS, bool PropriedadesAutomaticas)
        {
            TrataNome tratanome = new TrataNome();
            ITabelasECampos tabelasecampos = TabelaECamposFactoy.GetTabelasECampos(BancoDeDados);

            List<string> Listacampos = tabelasecampos.CamposDaTabela(NomeDaTabela);
            DirectoryInfo diretorio = new DirectoryInfo(caminho);

            if (!diretorio.Exists)
            {
                diretorio.Create();
            }

            StreamWriter aFile = new StreamWriter(caminho + "\\" + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + ".cs", false, Encoding.ASCII);

            GeraUsing(aFile);
            aFile.Write("using System.Collections.Generic;\n");
            aFile.Write("\n");
            aFile.Write("namespace " + NomeNamespace + "\n");

            aFile.Write("{\n");
            aFile.Write("    [Serializable]\n");
            aFile.Write("    public class " + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + "\n");
            aFile.Write("    {\n\n");

            /*Gera as variaveis privadas
             */
            this.GeraVariaveis(NomeDaTabela, tratanome, tabelasecampos, Listacampos, aFile, RetiraS, PropriedadesAutomaticas);

            /*Gera os Construtores
             */

            this.GeraConstrutores(NomeDaTabela, tratanome, tabelasecampos, Listacampos, aFile, RetiraS);

            /*Gera os Get e Set
             */
            this.GeraGetSet(NomeDaTabela, tratanome, tabelasecampos, Listacampos, aFile, RetiraS, PropriedadesAutomaticas);

            aFile.Write("    }\n");
            aFile.Write("}\n");
            aFile.Close();
        }
        public void GeraMetodoGetKey(string NomeDaTabela, TrataNome tratanome, ITabelasECampos tabelasecampos, StreamWriter aFile, bool RetiraS)
        {
            aFile.Write("\n");

            aFile.Write("       public " + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + " Get" +
                tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + "(object id)\n");
            aFile.Write("       {\n");

            aFile.Write("           using (ISession session = NHibernateHelper.OpenSession())\n");
            aFile.Write("           {\n");

            aFile.Write("               " + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS)
                + " toReturn =  session.Get(typeof("
                + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + "), id) as " +
                tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + ";\n");
            aFile.Write("               session.Close();\n");
            aFile.Write("               return toReturn;\n");
            aFile.Write("           }\n");

            aFile.Write("       }\n");
            aFile.Write("\n");

            aFile.Write("       public " + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + " Get" +
                tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + "(object id, ISession session)\n");
            aFile.Write("       {\n");

            aFile.Write("           return  session.Get(typeof("
                + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + "), id) as " +
                  tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(NomeDaTabela, RetiraS) + ";\n");

            aFile.Write("       }\n");
            aFile.Write("\n");
        }
        private void GeraVariaveis(string NomeDaTabela, TrataNome tratanome, ITabelasECampos tabelasecampos, List<string> Listacampos, StreamWriter aFile, bool RetiraS, bool PropriedadesAutomaticas)
        {
            int count = tabelasecampos.CamposChavesDaTabela(NomeDaTabela).Count;
            if (count > 1)
            {

                GeraClassePK(NomeDaTabela, tratanome, tabelasecampos, aFile, RetiraS, PropriedadesAutomaticas);
                if (PropriedadesAutomaticas)
                    return;
                aFile.WriteLine("\t\tprivate PK pk;");
            }

            if (PropriedadesAutomaticas)
                return;
            foreach (string campos in Listacampos)
            {
                if (count == 1 || !tabelasecampos.CampoChavesDaTabela(NomeDaTabela, campos))
                {

                    string linha;
                    if (tabelasecampos.NomeDaTabelaDaChaveEstrgeira(NomeDaTabela, campos) != "NULL")
                    {

                        linha = "        private " + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabelasecampos.NomeDaTabelaDaChaveEstrgeira(NomeDaTabela, campos), RetiraS) +
                           " " + tratanome.ConverteParaMinusculoERetiraUnderline(campos.ToLower(), RetiraS) + ";\n";

                    }
                    else
                    {
                        linha = "        private " + tabelasecampos.TipoDadoCSharp(NomeDaTabela, campos) +
                           " " + tratanome.ConverteParaMinusculoERetiraUnderline(campos.ToLower(), RetiraS) + ";\n";
                    }
                    aFile.Write(linha);
                }
            }

            string nomedatabelapassou = string.Empty;
            int i = 0;
            foreach (string tabela in tabelasecampos.TabelasOndeARelacionamento(NomeDaTabela))
            {
                if (nomedatabelapassou == tabela)
                {
                    i += 1;
                    nomedatabelapassou = tabela;
                }
                else
                {
                    i = 0;
                    nomedatabelapassou = tabela;
                }

                if (i > 0)
                {
                    aFile.Write("        private IList<" + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabela, RetiraS) +
                       "> " + tratanome.ConverteParaMinusculoERetiraUnderline(tabelasecampos.CamposChavesEstrageiraDaTabela(tabela)[i], RetiraS) + "List;\n");

                }
                else
                {

                    aFile.Write("        private IList<" + tratanome.ConverteAPrimeiraLetraParaMaisculoERetiraUnderline(tabela, RetiraS) +
                               "> " + tratanome.ConverteParaMinusculoERetiraUnderline(tabela, RetiraS) + "List;\n");

                }
            }

            aFile.Write("\n");
        }