Desenvolvendo para web

ASP.NET 3.5, AJAX, LINQ, Segurança, Silverlight, Web Mobile.

O Entity Framework é a tecnologia de acesso a dados do ADO.NET que oferece o mapeamento objeto relacional (O/R) a um nível conceitual de abstração. As ferramentas do ADO.NET geram classes .NET que representam o esquema do banco de dados da aplicação permitindo aos desenvolvedores formular consultas no banco de dados utilizando a linguagem de programação usada para construir a lógica de negócio diminuindo assim a quantidade de código necessário para realizar as consultas e aumentando a produtividade da equipe no projeto.

Figura 1 - Arquitetura do Entity Framework


Nesta segunda parte do artigo vamos trabalhar com a manipulação dos dados (insert, update e delete).


Vamos começar inserindo e atualizando dados na tabela LIVRO. No Default.aspx adicione o evento click do botão Salvar.


Figura 2


No Default.aspx vamos criar o método btnSalvar_Click e instanciar o contexto.


Figura 3


Quando o usuário clicar no botão Salvar, caso o título informado pelo usuário não exista no banco de dados um novo registro deve ser incluído, caso contrário o registro existente deve ser atualizado. Portanto, vamos primeiro buscar o dado na tabela LIVRO.


Figura 4


Se a lista de livro não possuir itens significa que o registro não existe e vamos fazer uma inserção.


Figura 5


Analisando a region "Insert", primeiro criamos um objeto da classe LIVRO e preenchemos as propriedades desse objeto com os dados informados pelo usuário na interface, depois adicionamos o objeto contexto através do método AddToLIVRO. Por último, fizemos a chamada ao método SaveChanges do contexto que identifica o objeto que incluímos e realiza a inserção no banco de dados.


Se a lista de livros possuir um item significa que o livro que o usuário está informando já existe e devemos apenas atualizar os campos AUTOR e ID_CATEGORIA. Vamos então incluir a region "Update" entre a region "Insert" e a linha "context.SaveChanges();".


Figura 6


Na region "Update" apenas alteramos as propriedades AUTOR e ID_CATEGORIA do objeto objLivro e novamente fizemos a chama ao método SaveChanges que vai se encarregar de identificar as propriedades que sofreram alterações e realizar o update no banco de dados.


Para que o usuário possa visualizar os dados que estão sendo manipulados vamos criar o método CarregaGrid que vai buscar os livros cadastrados e associar a GridView que adicionamos no Default.aspx.


Figura 7


Observe que usamos o método Include para trazer os dados da categoria de cada livro e criamos um novo objeto apenas com as propriedades que vamos utilizar na GridView.


Coloque a chamada ao método CarregaGrid no evento btnSalvar_Click e no Page_Load para que ao abrir o site pela primeira vez a GridView já venha com os dados carregados.


Figura 8


Figura 9


Agora é só executar a aplicação e ver como ficou.


Figura 10


Preencha os campos e clique no botão Salvar para ver o dados sendo incluído.


Figura 11


Figura 12


Se mudarmos agora o autor e a categoria poderemos ver a alteração.


Figura 13


Volte o registro que alteramos aos dados originais e inclua mais alguns para que possamos trabalhar com a exclusão de registros.


Figura 14


Podemos verificar nos exemplos acima que o GridView que incluímos no Default.aspx possuí uma coluna para a exclusão do registro, falta apenas definirmos o hyperlink desta coluna e faremos isso no evento onrowdatabound.


Figura 15


Vamos criar o método GridView1_RowDataBound que associa o javascript Excluir ao hyperlink de cada linha passando o título do livro com parâmetro que utilizaremos para a exclusão.


Figura 16


O Default.aspx já contém o javascript Excluir implementado.



Figura 17


Crie o método Excluir no Default.aspx.cs da seguinte forma:


Figura 18


No Page_Load vamos implementar o código que identifica que o usuário clicou no hyperlink e invoca o

método Excluir.


Figura 19


Agora vamos implementar o método Excluir.


Figura 20


O que fizemos no método Excluir foi foi instanciar o contexto, buscar o registro referente ao título que foi selecionado pelo usuário, preparar o objeto para exclusão através do método DeleteObject e, com a chamada ao método SaveChanges, efetivar a exclusão.


Agora é só executar a aplicação, clicar no hyperlink Excluir e deixar o Entity Framework trabalhar.


Figura 21


Nesta série de artigos pudermos ver como é simples fazer CRUD com o Entity Framework .


Participe deste artigo deixando seu comentário.


Aprofunde seus conhecimentos sobre esse tema na comunidade ADO.NET.


[]'s,

Thaís Simonato de Paula

Comentar

Você precisa ser um membro de Desenvolvendo para web para adicionar comentários!

Join Desenvolvendo para web

Thaís Simonato de Paula Comentário de Thaís Simonato de Paula em 15 fevereiro 2010 às 19:30
Oi Marcelo,

O objetivo do atigo foi apenas mostrar as funcionalidades do Entity Framework, quanto ao Entity Framework em camadas o artigo que tenho pra te indicar é o mesmo que o Fernando citou The Entity Framework In Layered Architectures.

Em relação a pergunta sobre a possibilidade de usar o Framework 4.0 no VS 2008 é exatamento o que o Fernando explicou também.

Em relação a transação é algo que ainda não está muito claro para mim, pois fazendo alguns testes percebi que algumas situações o contexto gerencia a transação e em outras não, só não sei ainda qual o critério utilizado. Poderíamos também utilizar a classe TransactionScope para fazer o gernenciamento das trasações, porém esta tem seus pró e contras que você pode entender neste artigo que fiz Implementando transação através da classe TransactionScope .

[]'s,
Thaís
Fernando Gonçalves Comentário de Fernando Gonçalves em 15 fevereiro 2010 às 1:36
Olá Marcelo,
Fiquei na dúvida se sua pergunta foi sobre o EntityFramework 4 ou o .Net Framework 4.

Se for o .Net Framework 4 no VS 2008 a resposta é não.

Se for sobre EF 4 a resposta é:
EF1 = VS2008 = .NET Framework 3.5 SP1
EF4 = VS2010 = .NET Framework 4.0

Obs.: Thais por favor não me xingue :) Estou apenas ajudando o Marcelo.

VS2010 e TFS2010 Release Candidate

[]'s,
Fernando Gonçalves
Marcelo Oliveira Comentário de Marcelo Oliveira em 14 fevereiro 2010 às 21:43
Olá Thais,

Mais uma dúvida, é possível usar o Framework 4.0 com o VS 2008 ?

Abraços,
Marcelo.
Fernando Gonçalves Comentário de Fernando Gonçalves em 14 fevereiro 2010 às 21:42
Olá Marcelo,
Para sua dúvida com relação a separação em camadas recomendo a leitura deste artigo The Entity Framework In Layered Architectures

Este artigo foi feito em cima da primeira versão do Entity Framework, mas a idéia é a mesma para o EF4.

Sobre as demais dúvidas deixo para outros lhe ajudarem.

[]'s,
Fernando Gonçalves
Marcelo Oliveira Comentário de Marcelo Oliveira em 14 fevereiro 2010 às 21:16
Olá Thais,

Achei muito legal o post, mas com ele observo que você utiliza o acesso ao EF diretamente da camada de apresentação, ou seja, do code behind. Entendo por ser apenas um exemplo didático, é mais fácil se fazer assim.

Mas esse tipo de abordagem não é a mais empregada em projetos de grande monta, onde temos equipes grandes envolvidas com desenvolvimento e se busca sempre a criação de soluções n-tier (multicamadas), separando as responsabilidades entre as camadas. É inclusive uma maneira de facilitar a localização de erros em fases futuras de manutenção, além, claro, de permitir uma melhor usabilidade do código.

Como não sou usuário do EF mas curioso em saber mais, vem aqui a minha pergunta. Como se daria o uso dessa tecnologica, levando em consideração projetos com várias camadas, onde temos normalmente a camada de interface, a de negócio, a de dados (onde provavelmente estaria sendo usado o EF aqui, e finalmente o banco de dados ?

Como exemplo, cito o caso onde se faz a carga de listas e combos. Em projetos multicamadas, os exemplos mostrados no posto não são utilizados na vida real. Como se daria o transporte dessas listas em projetos com várias camadas ? Existe alguma abordagem para esse tipo de projeto ou o EF não seria indicado ?

Outra dúvida, é com relação ao uso de transação. Saberia me dizer se é fácil o uso, se existe um controle fácil do pool de conexões, se existe a possibilidade de se fazer acessos ao banco de forma pessimista e otimista, ou com leitura "suja" etc ?

Desculpe a quantidade de perguntas, mas como é raro ver material sobre EF na nossa lingua, quando encontramos um material como o seu, é importante aproveitarmos para perguntar mais e saber mais :))

Abraços e parabens pela iniciativa. O seu material é excelente !!!

Abraços,
Marcelo.
Guilherme Gomes do Braz Comentário de Guilherme Gomes do Braz em 11 fevereiro 2010 às 10:11
Como informação complementar para quem estiver trabalhando com VS2008. Como no EF desta versão não possui o checkbox "Include foreign key columns in the model". Então para que possamos inserir, ou editar
registros, pode-se utilizar o seguinte recurso:
-No caso da inserção:
objLivro = new LIVRO()
{
TITULO=tbTitulo.Text.Trim(),
AUTOR=tbAutor.Text.Trim(),
};
int nID = Convert.ToInt32(ddlCategoria.SelectedValue);
objLivro.CATEGORIAReference.EntityKey = context.CATEGORIA.FirstOrDefault(c => c.ID == nID).EntityKey;

-No caso da atualização:
objLivro = liLivro[0];
objLivro.AUTOR = tbAutor.Text.Trim();
int nID = Convert.ToInt32(ddlCategoria.SelectedValue);
objLivro.CATEGORIAReference.EntityKey = context.CATEGORIA.FirstOrDefault(c => c.ID == nID).EntityKey;
Abraços a Todos
Guilherme Gomes do Braz Comentário de Guilherme Gomes do Braz em 11 fevereiro 2010 às 8:37
Excelente artigo Thais, continue escrevendo. Abraços
Leandro Souza Comentário de Leandro Souza em 9 fevereiro 2010 às 21:36
Olá Thais, muito bom este post.
Já da para compreender bem melhor a facilidade de manipulação de dados que o EF proporciona.

Existe a possibilidade de disponibilizar um exemplo utilizando controle de transação ?
Carlos Gomes Comentário de Carlos Gomes em 8 fevereiro 2010 às 7:22
Muito bom Thaís, continue assim, esses posts seus são ótimos.
Ozael da Silva Melo Comentário de Ozael da Silva Melo em 7 fevereiro 2010 às 18:10
Parabéns pelo post! Muito Bom...

© 2010   Criado por Ramon Durães no Ning.   Crie uma Rede do Ning!

Badges  |  Relatar um incidente  |  Privacidade  |  Termos de serviço

Entrar no bate-papo