Dica
ADO.NET Use o Null Semantics corretamente


Um DbContext possui uma propriedade muito interessante: UseDatabaseNullSemantics

Spoiler: Sempre coloque ele para true e não fique contando com mágicas prontas para resolver problemas.

Veja essa query abaixo:


var
A grande questão é: O que acontece se por acaso a variavel possuir valor null?

Não entendeu a importância disso?

Simples: null no banco de dados não pode usar uma simples igualdade ("="), precisa usar o operador "is"

Por default, o entity framework tenta resolver esse problema para você. A query acima gera uma instrução SQL com vários predicados, testando não só uma comparação direta dos valores mas também fazendo um teste adicional por valores null.

Ocorre que esse teste por valores afeta a performance da query. Então quando ele é adicionado sem que seja realmente necessário isso acaba sendo prejudicial ao sistema.

Evitar é simples: Defina o UseDatabaseNullSemantics para true. Com isso o entity framework para de adicionar checagem de null nas queries SQL.

E o que acontece se a variável for null? A questâo é que você não deveria contar com um funcionamento nessa situação. Seu código deveria prever a possibilidade do null, da seguinte forma:

if (variavel !=null)
result=(from ct in ctx.tabela
where ct.meucampo==variavel
select ct).ToList();
else
result=(from ct in ctx.tabela
where ct.meucampo==null
select ct).ToList();

A query por valor null precisa ser adicionada de forma explicita na query linq, sem uso da variável.

Desta forma: Ligue o UseDatabaseNullSemantics para otimizar sua aplicação e seja cuidadoso no desenvolvimento com valores null

Um plus: Notou como um campo null pode mudar acidentalmente as queries geradas e afetar a performance? Portanto não deixe campos serem criados como nullable por acidente.

Búfalo Informática
e-mail: Contato@bufaloinfo.com.br
Telefones: (21) 99240-7281 (21) 99240-5134