Entity Framework 4 - Fazendo CRUD
-
Upload
renato-santos -
Category
Documents
-
view
26 -
download
4
Transcript of Entity Framework 4 - Fazendo CRUD
26/2/2014 Entity Framework 4.1 - CRUD
http://www.macoratti.net/11/09/ef4_crud1.htm 1/8
Entity Framework 4.1 - Fazendo o CRUD e nada mais
Em meus últimos artigos sobre o Entity Framework eu dei ênfase ao utilização dos recursos do Code-First e da API DbContext onde
a partir da definição do modelo de entidades via classes POCO eram gerados o banco de dados e as tabelas.
O Entity Framework é uma ferramenta OR/M (Mapeamento Objeto Relacional) que realiza o mapeamento objeto relacional gerando
entidades e mapeando-as para as tabelas do banco de dados.
Com a nova versão do Entity Framework (a 4.1) podemos usar classes POCO para realizar o mapeamento objeto relacional e a persistência dos
dados sem termos que ficar dependentes do Entity Data Model gerado, pois as classes POCO não herdam das classes base geradas pelo EF.
Hoje vamos entender como atuam as funcionalidades CRUD (Create, Update, Delete) visto que são as mais usadas no dia dia.
É muito simples realizar as operações CRUD no Entity Framework 4.1. Para entender melhor como o processo funciona você deve
conhecer alguns conceitos básicos.
Vamos a eles...
Conceitos mais que básicos (e suficientes...)
O EF 4.1 trabalha em um nível de abstração que chamamos entidades que representam os objetos do domínio da sua aplicação que
foram definidos no EF.
Uma entidade pode estar em um dos cinco estados abaixo definidos, tal como definido pela enumeração EntityState:
Added : a entidade está sendo controlada pelo contexto, mas ainda não existe no banco de dados;
Unchagned : a entidade está sendo controlada pelo contexto e existe no banco de dados e seus valores de propriedade não
mudaram a partir dos valores no banco de dados;
Modified: a entidade está sendo controlado pelo contexto e existe no banco de dados, e alguns ou todos os seus valores de
propriedade foram modificados;
Deleted : a entidade está sendo controlada pelo contexto e existe no banco de dados, mas foi marcada para exclusão no banco
de dados da próxima vez que o método SaveChanges for chamado;
Detached: a entidade não está sendo controlada pelo contexto;
O método SaveChanges faz coisas diferentes para as entidades conforme o seu estado:
Entidades inalteradas (Unchanged) não são afetadas pelo método SaveChanges. As atualizações não serão enviadas ao banco de
dados para entidades no estado inalterado (unchanged);
Entidades Adicionadas(Added) são inseridas no banco de dados e, em seguida, tem seu estado alterado para inalterado
(Unchanged) após o retorno do método SaveChanges;
Entidades modificadas(Modified) são atualizadas no banco de dados e, em seguida, tornam-se inalteradas (Unchanged) quando
o método SaveChanges retorna;
Entidades deletadas(Delete) são excluídas do banco de dados e então são separadas (Detached) do contexto;
Quem gerencia o estado de um entidade é o Object Context que representa o entity container definido em um modelo conceitual e
contém a conexão correspondente à fonte de dados e fornece serviços como o gerenciamento de estado e resolução de identidade.
Um object context é representado por uma instância da classe ObjectContext.
Objetivo
O objetivo deste artigo é mostrar de forma simples e descomplicada como realizar as operações CRUD no Entity Framework 4.1
Em resumo iremos realizar as seguintes tarefas:
Definir entity data model com base em um modelo conceitual;
Referenciar o assembly Entity Framework (EF);
Gerar os scripts para criação do banco de dados e tabelas
Realizar as operações CRUD na tabela criada;
Recursos
Os recursos necessários para acompanhar o artigo são:
Entity Framework 4.1
Microsoft SQL Server 2008: Express
Visual Web Developer 2010 Express | Microsoft Visual Studio
26/2/2014 Entity Framework 4.1 - CRUD
http://www.macoratti.net/11/09/ef4_crud1.htm 2/8
Todos os recursos listados podem ser obtidos de forma gratuita.
Criando a aplicação ASP .NET
Abra o Visual Web Developer 2010 Express Edition e no menu File clique em New Project;
Na janela New Project selecione a linguagem de sua preferência (eu vou usar Visual Basic) e o template ASP .NET Web Application;
Nota: Este template ja cria uma estrutura de um projeto com páginas e arquivos que eu vou ajustar deixando apenas a página
Default.aspx e About.aspx;
A seguir informe o nome EF4_Produtos_Poco , a localização do projeto e clique no botão OK;
Definindo a classe POCO para a aplicação
Neste momento vamos definir as classes do nosso domínio que serão as nossas entidades gerenciadas pelo Entity Framework.
Aqui podemos usar o assistente e gerar um Entity Data Model ou definir as classes POCO. A vantagem da primeira é que é mais rápido
mas o modelo gerado traz consigo todo o arcabouço do Entity Framework. Usar as classes POCO dá mais trabalho (embora ele tenha
sido simplificado nesta versão) mas o código fica bem mais enxuto.
Antes de continuar temos que incluir uma referência ao Entity Framework 4.1 no nosso projeto;
- Clique com o botão direito do mouse sobre o projeto EF41_Produtos_CRUD e clique em Add Reference;
- Na janela Add Reference clique na guia Browse e selecione o assembly EntityFramework.dll do local onde você instalou o Entity
Framework 4.1 e clique em OK;
26/2/2014 Entity Framework 4.1 - CRUD
http://www.macoratti.net/11/09/ef4_crud1.htm 3/8
Vamos incluir também uma referência ao namespace System.Data.Entity repetindo o processo assim e selecionando este namespace
conforme abaixo:
Vamos então incluir uma nova classe chamada CadastroPOCO.vb a partir do menu Project -> Add Class;
Em seguida defina o seguinte código nesta classe:
Public Class Produto
Public Property produtoid As Integer
Public Property produtonome As Integer
Public Property produtopreco As Double
Public Property produtoestoque As Double
End Class
É isso mesmo que você esta vendo definimos a classe Produto com 4 propriedades apenas.
Agora temos que definir uma classe para o nosso contexto chamada produtoContexto.vb a partir do menu Project -> Add Class;
O código desta classe é visto a seguir:
Imports System.Data.Entity
Public Class ProdutoContexto
Inherits DbContext
Public Property Produto As DbSet(Of Produto)
End Class
É tudo o que precisamos: uma classe que herde de DbContext e defina uma propriedade Produto do tipo DBSet.
O DbSet é um invólucro para ObjectSet e permite que na sua execução o banco de dados e as tabelas sejam criados com base na
modelo definido.
Lembre-se que no Entity Framework 4.1 temos:
- ObjectContext - que permite consultar, controle de alterações e salvar no banco de dados.
- ObjectSet - que encapsula os conjuntos de objetos semelhantes.
Dessa forma o DbContext é um invólucro para ObjectContext e além disso esta classe contém:
- Um conjunto de APIs que são mais fáceis de usar do que a exposta pelo ObjectContext;
- As APIs que permitem utilizar o recurso do Code-First e as convenções;
O EF Code First permite que você conecte facilmente suas classes POCO do modelo em um banco de dados através da criação de
uma classe "DbContext" que expõe propriedades públicas que mapeiam para tabelas do banco de dados. A classe produtoContexto
acima ilustra como isso pode ser feito. Ela está mapeando nossa Classe Produto para a tabela "Produtos".
26/2/2014 Entity Framework 4.1 - CRUD
http://www.macoratti.net/11/09/ef4_crud1.htm 4/8
As propriedades da classe Produto por sua vez mapeiam para colunas na tabela Produto.
Dessa forma o banco de dados e a tabela Produto será criada usando uma convenção padrão adotada pelo Entity Framework.(Para
alterar esta convenção veja o meu artigo sobre Data Annotations)
Que tal criar o banco de dados e tabela e aproveitar para já incluir alguns dados na mesma. Vamos fazer isso incluindo uma nova
classe no projeto chamada InicializaBD.vb com o seguinte código:
Imports System.Data.Entity
Namespace EF_Produtos_CRUD
Public Class InicializaBD
Public Shared Sub geraTabelas(excluiBD As Boolean)
Using _contexto As New ProdutoContexto()
If excluiBD Then
_contexto.Database.Delete()
End If
Dim produto1 = New Produto() With {.produtonome = "Teclado", .produtopreco = 13, .produtoestoque = 10}
_contexto.Produto.Add(produto1)
Dim produto2 = New Produto() With {.produtonome = "Mouse Ótico", .produtopreco = 20, .produtoestoque = 5}
_contexto.Produto.Add(produto2)
_contexto.SaveChanges()
End Using
End Sub
End Class
End Namespace
Podemos ou não utilizar esta classe em nosso projeto e assim já criarmos a tabela com alguns dados armazenados. Você é quem
decide.
No exemplo eu não vou usar esta classe.
Definindo a interface da aplicação ASP .NET
Vamos definir o leiaute da página Default.aspx conforme a figura abaixo onde podemos ver que incluímos alguns controles TextBox,
Label e Button. Lembrando que estamos usando a Master Page Site.Master que foi ajustada também.
Finalmente vamos definir o código do arquivo code-behind Default.aspx.vb onde em cada evento Click de cada botão iremos incluir
o código pertinente.
26/2/2014 Entity Framework 4.1 - CRUD
http://www.macoratti.net/11/09/ef4_crud1.htm 5/8
1- Botão Novo
Protected Sub btnNovo_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnNovo.Click
Using db As New ProdutoContexto
Dim produto As New Produto
produto.produtonome = txtProduto.Text
produto.produtopreco = Convert.ToDecimal(txtPreco.Text)
produto.produtoestoque = Convert.ToDouble(txtEstoque.Text)
db.Produto.Add(produto)
db.SaveChanges()
lblmsg.Text = "Registro incluido com sucesso !"
End Using
End Sub
Cria uma nova instância de Produto e atribui valores as propriedades e inclui o produto no contexto de entidades para em seguida
salvar o novo produto.
2 - Botão Atualiza
Protected Sub btnAtualiza_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnAtualiza.Click
Using db As New ProdutoContexto
Dim codigoProduto As Integer = Convert.ToInt32(txtCodigo.Text)
Dim produto As Produto = db.Produto.First(Function(p) p.produtoid = codigoProduto)
produto.produtonome = txtProduto.Text
produto.produtopreco = txtPreco.Text
produto.produtoestoque = txtEstoque.Text
db.SaveChanges()
lblmsg.Text = "Registro atualizado com sucesso !"
End Using
End Sub
Obtém o código do produto e realiza uma consulta lambda para localizar o produto exibindo as informações na página para alteração.
3- Botão Procurar
Protected Sub btnProcurar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnProcurar.Click
lblmsg.Text = ""
Using db As New ProdutoContexto
Dim codigo As Integer = Convert.ToInt32(txtCodigo.Text)
Try
Dim produto = db.Produto.Find(codigo)
txtCodigo.Text = produto.produtoid
txtProduto.Text = produto.produtonome
txtPreco.Text = produto.produtopreco
txtEstoque.Text = produto.produtoestoque
Catch ex As Exception
lblmsg.Text = "Registro não localizado !"
Limpar()
End Try
End Using
End Sub
Obtém o código do produto e realiza uma consulta LINQ para localizar o produto exibindo as informações na página.
4- Botão Excluir
Protected Sub btnExcluir_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnExcluir.Click
Using db As New ProdutoContexto
Dim codigoProduto As Integer = Convert.ToInt32(txtCodigo.Text)
Dim produto As Produto = db.Produto.First(Function(p) p.produtoid = codigoProduto)
26/2/2014 Entity Framework 4.1 - CRUD
http://www.macoratti.net/11/09/ef4_crud1.htm 6/8
db.Produto.Attach(produto)
db.Entry(produto).State = EntityState.Deleted
db.SaveChanges()
lblmsg.Text = "Registro excluído com sucesso !"
End Using
End Sub
Obtém o código do produto e realiza uma consulta lambda para localizar o produto; em seguida anexa o produto e altera seu estado
para deletado para em seguida usar o método SaveChanges() para excluir a entidade.
5- Botão Limpar e método Limpar()
Protected Sub btnLimpar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnLimpar.Click
Limpar()
End Sub
Private Sub Limpar()
txtCodigo.Text = ""
txtProduto.Text = ""
txtPreco.Text = ""
txtEstoque.Text = ""
lblmsg.Text = ""
End Sub
Executando o projeto iremos obter a página Default.aspx onde digitando os valores nas caixas de texto e clicando no botão Incluir
temos a inclusão de um produto conforme a figura abaixo:
Após executarmos os projeto pela primeira vez se verificamos o SQL Server usando o SQL Server Management Studio iremos
26/2/2014 Entity Framework 4.1 - CRUD
http://www.macoratti.net/11/09/ef4_crud1.htm 7/8
descobrir que o banco de dados e a tabela Produtoes foram criados conforme mostra a figura a seguir:
Note que executando uma consulta SQL na tabela também vemos o registro que acabamos de incluir.
A seguir temos as figuras para as operações de inclusão e procura de um produto
Após isso se consultarmos as tabelas no SQL Server veremos os dados persistidos conforme a figura abaixo:
26/2/2014 Entity Framework 4.1 - CRUD
http://www.macoratti.net/11/09/ef4_crud1.htm 8/8
O Entity Framework fez todo o trabalho pesado para nós... Eta vida boa !
Pegue o projeto completo aqui: EF_Produtos_CRUD.zip
Louvai ao Senhor. Bem-aventurado o homem que teme ao Senhor, que em seus mandamentos tem grande prazer.
Salmos 112:1
Referências:
Seção VB .NET do Site Macoratti.netSuper DVD .NET - A sua porta de entrada na plataforma .NET
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Seção C# do site Macoratti.net
Entity Frameweork 4 - Usando POCO, Code First e as convenções padrão
Desvendando o Entity Framework - O Entity Data Model.NET - Introdução ao ADO .NET Entity Framework IIDesvendando o Entity Framework - A classe EntityConnectionADO .NET Entity Framework - Usando LINQ to EnttiesApresentando LINQ to EntitiesEntity Framework - Conceitos Básicos - TerminologiaEntity Framework - Conceitos Básicos - Espiando o modelo conceitualEntity Framework - Conceitos Básicos - Usando Lazy Load e Eager LoadEntity Framework - Conceitos Básicos - Incluindo, modificando e excluindo objetosEntity Framework - Conceitos Básicos - Incluindo, modificando e excluindo objetos IIEntity Framework - Conceitos Básicos - Definindo um EDM usando a herança Table Per Type (TPT)Entity Framework - Model First - Criando o script para gerar o banco de dados a partir do modelo conceitual.Entity Framework - Usando o EF em aplicações ASP .NEThttp://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.aspxData Annotations in the Entity Framework and Code FirstEntity Frameweork 4 - Usando Data Annotations
José Carlos Macoratti