C# - CRUD básico com Entity Framework para iniciantes - II
Na primeira parte deste artigo eu criei o projeto no Visual Studio 2010 e criei o Entity Data Model usando a nossa fonte de dados para gerar o mapeamento ORM.
Vou mostrar agora como acessar os dados e efetuar a navegação e as operações CRUD(Create, Update, Delete) na fonte de dados.
Acessando os dados e realizando as operações CRUD
No evento Load do formulário form1.cs vamos incluir o código a seguir:
private void Form1_Load(object sender, EventArgs e) { contextoDados = new CadastroEntities(); estadoLista = new List<ESTADO>(); ObjectQuery<ESTADO> estadoConsulta = contextoDados.Estados.Where("it.sigla <> 'nada'"); estadoLista = estadoConsulta.ToList(); gdvEstados.DataSource = estadoConsulta.ToList(); MessageBox.Show(estadoConsulta.ToTraceString()); PreencheCampos(); } |
Este código cria uma nova instância do nosso contexto e realizar uma consulta para obter os objetos da entidade ESTADO armazenado-os em seguida na lista genérica estadoLista.
Em seguida os mesmos são exibidos no controle DataGridView para exibir a lista de estados e também chamamos a rotina preencheCampos() que exibe os valores nos controles do formulário.
A rotina preenche campos apenas obtém os valores da lista genérica estadoLista e os exibe nos controles TextBox do formulário;
private void PreencheCampos() { ESTADO estadoAtual = estadoLista[indiceAtualEstado]; txtID.Text = estadoAtual.id.ToString(); txtSigla.Text = estadoAtual.sigla; txtEstado.Text = estadoAtual.nome; //articleCountLabel.Text = currentAuthor.Article.Count.ToString(); //authorIDLabel.Text = currentAuthor.AuthorID.ToString(); } |
A seguir teremos o código relacionado com cada evento Click dos botões para efetuar a navegação pelos objetos da lista representando a navegação pelos registros da tabela Estados do banco de dados;
1- Botão Primeiro << - vai para o primeiro registro:
private void btnPrimeiro_Click(object sender, EventArgs e) { indiceAtualEstado = 0; PreencheCampos(); } |
2- Botão Anterior < - retorna para o registro anterior:
private void btnAnterior_Click(object sender, EventArgs e) { if (indiceAtualEstado == 0) { MessageBox.Show("Não há mais estados"); } else { indiceAtualEstado -= 1; PreencheCampos(); } } |
3- Botão Próximo > - vai para o próximo registro:
private void btnProximo_Click(object sender, EventArgs e) { if (indiceAtualEstado == estadoLista.Count - 1) { MessageBox.Show("Fim de estados"); PreencheCampos(); } else { indiceAtualEstado += 1; PreencheCampos(); } } |
4- Botão Úlitmo >> - vai para o último registro:
private void btnUltimo_Click(object sender, EventArgs e) { indiceAtualEstado = estadoLista.Count - 1; PreencheCampos(); } |
No código usado acima estou usando a lista genérica para verificar a posição do registro e a rotina preencheCampos() para exibir os registros no formulário.
No evento Click do botão Atualizar temos o código a seguir que atualiza os objetos com os valores informados nos controles de formulário:
private void btnAtualizar_Click(object sender, EventArgs e) { ESTADO estadoAtual = estadoLista[indiceAtualEstado]; estadoAtual.sigla = txtSigla.Text; estadoAtual.nome = txtEstado.Text; } |
O código do botão Novo solicita a confirmação do cliente para incluir um novo objeto no contexto do objeto atual;
private void btnNovo_Click(object sender, EventArgs e) { if (MessageBox.Show("Confirma inclusão do registro ?", "Estados", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) { limparCampos(); ESTADO novoEstado = new ESTADO(); novoEstado.sigla = txtSigla.Text; novoEstado.nome = txtEstado.Text; novoEstado.id = -1; //para deixar claro que um novo estado estadoLista.Add(novoEstado); contextoDados.AddToEstados(novoEstado); indiceAtualEstado = estadoLista.Count - 1; //Define o indice para último item do novo item PreencheCampos(); } } |
Para limpar os campos do formulário temos a rotina limparCampos() a seguir:
private void limparCampos() { txtSigla.Text = string.Empty; txtEstado.Text = string.Empty; txtID.Text = "NOVO"; } |
O código do botão Salvar usa o método SaveChanges() do contexto para persistir os objetos e os dados na fonte de dados
private void btnSalvar_Click(object sender, EventArgs e) { int linhasAfetadas = contextoDados.SaveChanges(true); MessageBox.Show(linhasAfetadas.ToString() + " atualizações persistidas no banco de dados."); PreencheCampos(); } |
Veja abaixo o resultado da inclusão de alguns registros nos dois modos de exibição do formulário do projeto:
Dessa forma usamos o Entity Framework para realizar o mapeamento ORM em nossa fonte de dados e tratando com os objetos mapeados pudemos realizar as operações básicas de acesso e manutenção de dados.
Pegue o projeto completo aqui: EF_Crud_Basico.zip
Aguarde mais artigos sobre o Entity Framework.
Referências: