Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
1224
Assunto : SQL Server
Titulo: Utilizando query hints com o entity framework

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


O entity framework não suporta diretamente o uso de query hints, como por exeplo NoLock, que é um importante query hint no trabalho com SQL Server.

Porém o entity framework possui um recurso chamado interceptors que nos permite interceptar a execução das instruções no SQL Server e alterar as instruções, incluindo, por exemplo, query hints.

Veja um exemplo da montagem e um interceptor:

public class NoLock : DbCommandInterceptor
{
private static readonly Regex nolockRegex =
new Regex(@"(?<table>AS \[Extent\d+\](?! WITH \(NOLOCK\)))",
RegexOptions.Multiline | RegexOptions.IgnoreCase);

[ThreadStatic]
public static bool UseNoLock=false;

public override void ScalarExecuting(DbCommand command,
DbCommandInterceptionContext<object> interceptionContext)
{
if (UseNoLock)
{
command.CommandText =
nolockRegex.Replace(command.CommandText, "${table} WITH (NOLOCK)");
}
}


public override void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
{
if (UseNoLock)
{
command.CommandText =
nolockRegex.Replace(command.CommandText, "${table} WITH (NOLOCK)");

}
}
}

Para ativar o interceptor podemos inclui-lo no arquivo .config da seguinte forma:

<entityFramework>
<interceptors>
<interceptor type="libInterceptor.NoLock, libInterceptor">
</interceptor>
</interceptors>
</entityFramework>

Neste exemplo podemos utilizar o interceptor da seguinte forma:

libDados.northwndEntities ct = new libDados.northwndEntities();

var res = (from x in ct.Customers.Include(x=> x.Orders)
select x);

NoLock.UseNoLock = true;

var res3 = res.ToList();

NoLock.UseNoLock = false;


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