Como Usar (Exemplos)

<< Click to Display Table of Contents >>

Navigation:  Persistencia >

Como Usar (Exemplos)

Previous pageReturn to chapter overviewNext page

Introdução

 

Estes exemplos mostram como implementar sistema de persistência "automática" usando MySQL e Class/Property Attributes

Com essa persistência, fica fácil gravar (insert e update) e ler (selects) list de objetos e DataTables (esse último só pra select).

Exemplos mostram casos simples e mestre detalhes.

 

Os fontes, o script do banco e seus dados estão como sub-itens do tópico "Persistência" no help.

 

Fontes completo aqui

 


SELECT

 

Um exemplo simples de listagem (programa final usando a persistência pronta e o modelo devidamente implementado):

 

Usando o objeto Leitor

 

            Leitor l = DAL.Listar(new Empregado());

            while (!l.Eof)

            {

                Console.WriteLine(l.GetString("id_empregado") + "-" + l.GetString("nm_empregado"));

                l.Next();

            }

 

Usando DataTable como retorno

 

            DataTable tb = DAL.ListarDataTable(new Usuario());

            foreach (DataRow r in tb.Rows)

                Console.WriteLine(r["nm_usuario"].ToString());

 

Usando um List<T>

 

            List<Empregado> list = DAL.ListarObjetos<Empregado>();

 

            foreach (Empregado e in list)

                Console.WriteLine(e.Id + "-" + e.Nome);

 

Exemplo de obter um objeto único pelo seu id

 

            Empresa empresa = DAL.GetObjetoById<Empresa>(3);

 

Pegar o código de um objeto pelo seu nome

 

            Empregado empregado = new Empregado();

 

            Filtros filtro = new Filtros().Add(() => empregado.Nome, empregado, FiltroExpressao.Igual, "Junior");

            empregado = DAL.GetObjeto<Empregado>(filtro.ToString());

 

            if (empregado == null)

                Console.WriteLine("Nao encontrado!");

            else

                Console.WriteLine(empregado.Id + "-" + empregado.Nome);

 

Obter uma listagem de empregados de uma empresa por ordem de nome do empregado  (estilo mestre-detalhe)

 

            // carrega a empresa 3

            Empresa empresa = DAL.GetObjetoById<Empresa>(3);

            Console.WriteLine("Empresa: " + empresa.Id + " " + empresa.Nome);

 

            // pega empregados da empresa acima e lista-os

            Empregado empregado = new Empregado();

 

            // filtra os empregados pelo código da empresa

            Filtros filtro = new Filtros();

            filtro.Add(() => empregado.IdEmpresa, empregado, FiltroExpressao.Igual, empresa.Id);

 

            // ordena por nome

            Ordem order = new Ordem().Add(() => empregado.Nome, empregado);

 

            List<Empregado> list = DAL.ListarObjetos<Empregado>(filtro.ToString(), order.ToString());

 

            foreach (Empregado e in list)

                Console.WriteLine(e.Id + "-" + e.Nome);

 

 

Filtrando um list de objetos por várias expressões where combinadas

 

            Empregado empregado = new Empregado();

 

            Filtros filtro = new Filtros();

 

            filtro.AbrirGrupo();

            filtro.Add(() => empregado.Nome, empregado, FiltroExpressao.Diferente, "Junior");

            filtro.Add(() => empregado.IdEmpresa, empregado, FiltroExpressao.Igual, 3);

            filtro.FecharGrupo(FiltrosOperador.Or);

 

            filtro.AbrirGrupo();

            filtro.Add(() => empregado.Nome, empregado, FiltroExpressao.Diferente, "Alex");

            filtro.Add(() => empregado.IdEmpresa, empregado, FiltroExpressao.Igual, 8);

            filtro.FecharGrupo();

 

            Ordem ordem = new Ordem();

            ordem.Add(() => empregado.Nome, empregado);

 

            List<Empregado> lista = DAL.ListarObjetos<Empregado>(filtro.ToString(), ordem.ToString());

 

            foreach (Empregado e in lista)

            {

                Console.WriteLine(e.Id + "-" + e.Nome);

            }

 

Observação

                    Existe também o filtro.AddNot()

 

Filtrando por um período (between)

 

            Empresa emp = new Empresa();

 

            Filtros filtro = new Filtros();

            filtro.Add(() => emp.Data, emp, FiltroExpressao.Entre, DateTime.Parse("2013-01-01"), DateTime.Parse("2013-12-31"));

            filtro.Add(() => emp.Id, emp, FiltroExpressao.Entre, 1, 50);

 

            Console.WriteLine(filtro.ToString());

 

Retorno

            dt_data between '2013-01-01' and '2013-12-31' and id_empresa between 1 and 50

 


INSERT e UPDATE

 

 

Inserção simples

 

            Empresa emp = new Empresa();

            emp.Nome = "Microsoft";

            long id_gravou = DAL.Gravar(emp);

            Console.WriteLine("Inserido: " + id_gravou.ToString());

 

Update simples (trocando o nome)

 

            Empresa emp = new Empresa();

            emp.Id = 43; // isso é que "diz" para a função que é um update!!

            emp.Nome = "Apple";

            DAL.Gravar(emp);

 

Inserindo vários numa list (mesma transação)

 

            List<Empresa> lista = new List<Empresa>();

            lista.Add(new Empresa() { Nome = "empresa1" });

            lista.Add(new Empresa() { Nome = "empresa2" });

            lista.Add(new Empresa() { Nome = "empresa3" });

            lista.Add(new Empresa() { Nome = "empresa4" });

            lista.Add(new Empresa() { Nome = "empresa5" });

 

            int registros_gravados = DAL.GravarList<Empresa>(lista);

 

            Console.WriteLine("Total de registros gravados: " + registros_gravados.ToString());

 

Inserindo mestre-detalhe (grava mestre e os detalhes - tudo na mesma transação)

 

            Empresa emp = new Empresa() { Nome = "Market" };

 

            List<Empregado> list = new List<Empregado>();

            list.Add(new Empregado() { Nome = "Junior" });

            list.Add(new Empregado() { Nome = "Daniel" });

            list.Add(new Empregado() { Nome = "Josué" });

 

            Console.WriteLine(DAL.GravarMestreDetalhe(emp, list));

 


SELECT MESTRE-DETALHE

 

Obtendo select usando retorno DataTable, filtros e order by

 

            // cria os objetos default

            Empresa empresa = new Empresa();

            Empregado empregado = new Empregado();

 

            // monta um filtro por um campo da tabela pai e um da tabela filha

            Filtros filtro = new Filtros();

            filtro.Add(() => empresa.Id, empresa, FiltroExpressao.Menor, 100);

            filtro.Add(() => empregado.Id, empregado, FiltroExpressao.Maior, 1);

 

            // ativa um order by

            Ordem ordem = new Ordem().Add(() => empresa.Id, empresa);

 

            // busca os dados

            DataTable t = DAL.ListarDataTableJoin(empresa, empregado, filtro.ToString(), ordem.ToString());

 

            // mostra na tela

            foreach (DataRow r in t.Rows)

                Console.WriteLine(r["id_empresa"].ToString() + "-" + r["nm_empresa"].ToString() + ":" + r["nm_empregado"].ToString());

 

Mesmo do anterior, só que usando o "Leitor"

 

            // cria os objetos default

            Empresa empresa = new Empresa();

            Empregado empregado = new Empregado();

 

            // monta um filtro por um campo da tabela pai e um da tabela filha

            Filtros filtro = new Filtros();

            filtro.Add(() => empresa.Id, empresa, FiltroExpressao.Menor, 100);

            filtro.Add(() => empregado.Id, empregado, FiltroExpressao.Maior, 1);

 

            // ativa um order by

            Ordem ordem = new Ordem().Add(() => empresa.Id, empresa);

 

            // busca os dados

            Leitor l = DAL.ListarJoin(empresa, empregado, filtro.ToString(), ordem.ToString());

 

            while (!l.Eof)

            {

                Console.WriteLine(l.GetString("id_empresa")  + "-" + l.GetString("nm_empresa")  + ":" + l.GetString("id_empregado")  + "-" + l.GetString("nm_empregado"));

                l.Next();

            }

 


Validar

 

Antes de gravar é possível verificar se os campos marcados como obrigatórios estão preenchidos (required)

 

            Empregado empregado = new Empregado();

 

            string msg;  // mensagem de erro

            string nome;  // nome do campo (pode ser usado para saber onde manda o foco)

 

            if (!Validador.IsValid(empregado, out msg, out nome))

            {

                Console.WriteLine(msg);

            }

 

Saída: O preenchimento de Nome do empregado é obrigatório