PantaNet

ADO.NET Entity Framework - parte 6 - SQL

Nos posts anteriores, mostrei como criar uma aplicação que faz operações CRUD sem a necessidade de executar nenhum comando SQL, pois o Entity Framework traduz de forma transparente todas as expressões LINQ em comandos SQL nativos.

 

Neste post vamos dar uma olhada nos comandos SQL gerados.

 

Capturando o SQL

 

Para visualizar o SQL gerado fora do ambiente do visual studio (debugger),  precisamos recuperar um objeto do tipo IQueryable através do DbContext e chamar o método ToString() que foi sobrescrito para retornar o comando SQL gerado para a expressão LINQ atual do objeto.

Observação: Enquanto estivermos trabalhando com métodos retornando IQueryable, o banco de dados não recebe nenhum comando, o EF apenas gera o SQL traduzido pela expressão IQueryable atual. O banco de dados só vai receber o comando SQL a partir do momento em que precisarmos trabalhar com os objetos materializados, ou seja, ao chamar qualquer um dos métodos ToList(), FirstOrDefault(), Single(), etc etc.

Nos exemplos deste POST nenhuma consulta foi executada no banco.

 

Utilizando o repositório que foi mostrado no artigo anterior, há um método chamado GetQueryable() que retorna o DbSet.AsQueryable().Veja como utilizar:

 

 

Os Sql's gerados para as consultas acima foram os seguintes:

 

Repare que quando a expressão LINQ não fazer projeção, O EF gera um SQL contendo todos os campos da tabela. Para que seja recuperado somente os campos desejados, devemos fazer projeção. Por exemplo, para recuperar apenas o CPF de uma pessoa física, devemos fazer da seguinte forma:

 

 

O SQL gerado pelo EF ficou assim:

 

Obrigatoriamente, o EF sempre vai incluir no SELECT os campos chaves da tabela.

 

Acompanhe o código mostrado a seguir. Conforme vou adicionando condições à expressão IQueryable, o SQL vai mudando também:

 

Inserts/Updates/Deletes

 

Infelizmente não é possível prever o código SQL gerado pelo EF para operações realizadas através do método SaveChanges(). Para visualizar com mais detalhes todos os comandos SQL que são executados no SQL Server, recomenda-se o uso de uma ferramenta de monitoração do banco de dados. por exemplo, temos o SQL Profiler e o Anjlab (http://anjlab.com/en/projects/opensource/sqlprofiler). 

 

Há uma ferramenta comercial específica para Entity Framework chamada EF Profiler (http://efprof.com/).

 

 

[]'s

Exibições: 1040

Comentário de Jone em 25 abril 2011 às 19:21
Índice com todos os posts da série em meu blog particular:

http://silverlightrush.blogspot.com/2011/04/nova-serie-de-artigospo...
Comentário de FULVIO CEZAR CANDUCCI DIAS em 25 abril 2011 às 19:38
Muito Legal, Parabens !!!!
Comentário de Napoleão Cristiano X. Sanabia em 3 maio 2011 às 15:00

Jone,

Primeiramente parabéns pelo post. Mas esses dias estava procurando uma extensão para utilizar com o meu visual studio e verifiquei que existe uma extensão que faz justamente isso, só não sei qual é o nome. Se você ou alguém tiver interesse me diga que eu verifico aqui. Valeu !!!!!!!!!!!!!!!!

Comentário de Helder Rolin Pereira em 14 junho 2011 às 18:56
Artigo show de bola...mto bom!!! Eu que to acustumado a usar DAO, assim fica mto mais facil e rapido...agora é soh acostumar a usar...
Comentário de Hugo Oliveira em 23 fevereiro 2012 às 15:57

Olá Jone,

    Como eu faria para configurar esse teu projeto de exemplo, de forma que eu possa usar o MySQL e ainda por cima, o sistema não excluir o banco de dados, mas fazer alterações no mesmo caso isso ocorra?

   

  

Comentar

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

Entrar em PantaNet

Fotos

Carregando...
  • Adicionar fotos
  • Exibir todos

Apoio





 

© 2013   Criado por Gustavo Malheiros.

Badges  |  Relatar um incidente  |  Termos de serviço