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:


José Carlos Macoratti