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
Comentário de FULVIO CEZAR CANDUCCI DIAS em 25 abril 2011 às 19:38
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
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
© 2013 Criado por Gustavo Malheiros.
Você precisa ser um membro de PantaNet para adicionar comentários!
Entrar em PantaNet