Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
1260
Assunto : ADO.NET
Titulo: Cuidado com a direção do predicado

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon



Digamos que temos uma Cliente e ClienteSeguro. A empresa tem vários tipos de cliente, ClienteSeguro é um deles. Veja essa query:


var result= (from c in ctx.ClienteSeguro
where c.Cliente.Name=="Joao"
select c).FirstOrDefault();


Parece uma query simples, certo?

Mas estamos falando de um relacionamento 1-1. Vamos colocar uma complexidade a mais: Digamos que na tabela ClienteSeguro implementamos uma herança e a tabela contém instâncias de 2 classes diferentes, com um campo discriminator.

Está pronto o desastre, mas você, desenvolvedor, não vai ver.

Para ver esse desastre, precisa utilizar o intellitrace ou o SQL Server Profiler para identificar a instrução SQL gerada pelo entity.

É simples: O que deveria ser um simples relacionamento entre duas tabelas vira 3 relacionamentos, o entity repete uma das tabelas duas vezes na query, prejudicando a performance da query.

Certamente é um bug, não encontrei nenhuma documentação na web. Mas existe um pequeno hack para evita-lo:

var result= (from c in ctx.Cliente
where c.Name=="Joao"
select c.ClienteSeguro).FirstOrDefault();

Simplesmente invertendo a query o problema se resolve e temos uma query SQL bem montada.

Não é um problema muito comum, ocorre em um relacionamento 1-1 onde um dos lados usa herança e TPH, porém isso chama atenção para o fato que devemos sempre observar as queries geradas pelo entity e ter certeza que tudo está correndo bem.


Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
Nenhum comentário foi realizado ainda. Seja o primeiro !
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br