Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Защо EF генерира SQL заявки с ненужни нулеви проверки?

Задайте UseDatabaseNullSemantics = true;

  • Когато UseDatabaseNullSemantics == true , (operand1 == operand2) ще се преведе като:

    WHERE operand1 = operand2
    
  • Когато UseDatabaseNullSemantics == false , (operand1 == operand2) ще се преведе като:

    WHERE
        (
            (operand1 = operand2)
            AND
            (NOT (operand1 IS NULL OR operand2 IS NULL))
        )
        OR
        (
            (operand1 IS NULL)
            AND
            (operand2 IS NULL)
        )
    

Това е документирано от Microsoft:

Получава или задава стойност, указваща дали семантиката null на базата данни се показва при сравняване на два операнда, като и двата са потенциално нулеви. Стойността по подразбиране е false.

Можете да го зададете във вашия DbContext конструктор на подклас, така:

public class MyContext : DbContext
{
    public MyContext()
    {
        this.Configuration.UseDatabaseNullSemantics = true;
    }
}

Или можете също да зададете тази настройка на вашия dbContext екземпляр отвън като примера с код по-долу, от моя гледна точка (виж коментара @GertArnold), този подход ще бъде по-добър, защото няма да промени поведението или конфигурацията на базата данни по подразбиране):

myDbContext.Configuration.UseDatabaseNullSemantics = true;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Сравнете два реда и идентифицирайте колони, чиито стойности са различни

  2. T-SQL за намиране на име на отдалечен сървър на свързания сървър

  3. Използване на резултата от израз (например извикване на функция) в списък с параметри на запомнени процедури?

  4. Процедурата очаква параметър, който не е предоставен

  5. Как да инсталирате SQL Server на Linux