<< Click to Display Table of Contents >> Como Usar (Exemplos) |
![]() ![]() ![]() |
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
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
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));
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();
}
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