Entity Framework - Conceitos Básicos - Manutenção de uma tabela


Neste artigo eu procuro dar uma visão geral sobre a utilização do Entity Framework para realização de tarefas básicas de manutenção de dados com alguns padrões usados em banco de dados. Para isso eu irei montar alguns cenários mostrando como usar o EF para realizar a tarefa de exibição e manutenção dos dados quando for o caso. Abaixo segue um resumo dos cenários que serão abordados:

Em todos os cenários irei usar uma aplicação Windows forms criada no Visual Studio 2008 SP1 e o banco de dados SQL Server 2008 Express.

Vou iniciar definindo o modelo básico usado na aplicação exemplo. Eu vou usar um banco de dados bem parecido com o Northwind.mdf mas com uma estrutura mais enxuta para facilitar o trabalho. Ele foi criado usando o SQL Server Management Studio 2008. Segue a baixo a estrutura do banco de dados que eu chamei Macoratti.mdf:

Nota: Veja o artigo : Usando o SQL Server Management Studio

 

Pegue o script para gerar o modelo acima aqui: MacorattiSQL.zip

Abra então o Visual Studio 2008 SP1 e crie um novo projeto do tipo Windows Forms chamado EF_Crud3;

A seguir vamos gerar um Entity Data Mode (EDM)l a partir do modelo exibido na figura acima;

No menu Project -> New Item , selecione em Templates o item ADO  .NET Entity Data Model e informe o nome Macoratti.edmx e clique em Add;

Dessa forma teremos o nosso modelo conceitual gerado conforme a figura a seguir:

Este será o nosso ponto de partida para as considerações e para os cenários que iremos desenhar para mostrar como usar o EF em algumas situações de manutenção de dados.

Cenário 1 - Manutenção de uma única tabela

Neste cenário vou mostrar como realizar as operações básicas manutenção de um única tabela:  a tabela Categorias.

Como eu já mostrei como realizar as operações básicas - CRUD - em uma tabela efetuando os métodos apropriados do EF, neste exemplo vou usar o recurso de manutenção dos dados através do controle DataGridView - gdvCategorias:

Então no formulário form1.vb inclua um controle DataGridView e um Button conforme o leiaute abaixo:

A seguir vejamos o código que vamos usar para realizar a manutenção dos dados da tabela Categorias:

Declare a variável categoriaContexto conforme a seguir :

Protected categoriaContexto As MacorattiEntities

No evento Load do formulário fazemos uma consulta para selecionar os registros e exibir no Grid:

 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Try
            categoriaContexto = New MacorattiEntities

            Dim consulta = From c In categoriaContexto.Categorias _
                                    Select c
           gdvCategorias.DataSource = consulta.ToList()

            'define a largura das colunas 
            gdvCategorias.Columns("nome").Width = 90
            gdvCategorias.Columns("descricao").Width = 150
            gdvCategorias.Columns("imagemurl").Width = 150
            'oculta a exibição das colunas indicadas
            gdvCategorias.Columns("categoriaid").Visible = False
            gdvCategorias.Columns("Produtos").Visible = False
        Catch ex As Exception
            MsgBox("Erro : " & ex.Message)
        End Try
    End Sub

 

Poderíamos ter usado o ObjectQuery para realizar a consulta conforme o código abaixo:

       Dim categoria As ObjectQuery(Of Categoria) = categoriaContexto.Categorias
       gdvCategorias.DataSource = categoria

mas para isso teríamos que declarar o namespace:

Imports System.Data.Objects

O ObjectQuery representa uma consulta tipada contra um  Entity Data Model (EDM) em um dado object context.(No nosso caso MacorattiEntities)

A classe genérica ObjectQuery<(Of <(T>)>) representa uma consulta que retorna uma coleção de zero ou mais objetos de um tipo específico.

O ObjectContext precisa ser definido antes de um ObjectQuery ser executado. Este contexto fornece a conexão e a informação sobre os metadados que é necessária para compor e executar a consulta. Um ObjectQuery  é executado nos seguintes cenários:

  • Quando ele é acionado em um laço foreach/For Each;
  • Quando ele é atribuído para preencher uma coleção do tipo List(Of <(T>)>);
  • Quando o método Execute for chamado explicitamente;

O restante do código seria igual e o resultado seria o mesmo.

No evento Click do botão de comando inclua o código abaixo :

 Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click

        Try
            categoriaContexto.SaveChanges()
            MsgBox("Alteração salva com sucesso.")
        Catch ex As Exception
            MsgBox("Erro : " & ex.Message)
        End Try
    End Sub

E pronto, com isso já podemos incluir, alterar e excluir dados usando o DataGridView e persistir as informações no banco de dados usando o Entity Framework.

Pode não ser aderente as melhores práticas (como não é) mas funciona perfeitamente. (Exemplo ideal para apresentações...)

Pegue o projeto completo aqui: EF_Crud3.zip

Eu sei é apenas Entity Framework , mas eu gosto.

Referências:


José Carlos Macoratti