sql >> Database >  >> RDS >> Sqlserver

Waarom genereert EF SQL-query's met onnodige null-controles?

Stel UseDatabaseNullSemantics = true in;

  • When UseDatabaseNullSemantics == true , (operand1 == operand2) wordt vertaald als:

    WHERE operand1 = operand2
    
  • When UseDatabaseNullSemantics == false , (operand1 == operand2) wordt vertaald als:

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

Dit is gedocumenteerd door Microsoft:

Hiermee wordt een waarde opgehaald of ingesteld die aangeeft of database-nul-semantiek wordt weergegeven bij het vergelijken van twee operanden, die beide potentieel nullbaar zijn. De standaardwaarde is onwaar.

U kunt het instellen in uw DbContext subklasse constructor, zoals zo:

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

Of u kunt deze instelling ook instellen op uw dbContext instantie van buitenaf zoals het onderstaande codevoorbeeld, vanuit mijn oogpunt (zie @GertArnold-opmerking), zal deze benadering beter zijn, omdat het het standaard databasegedrag of de standaardconfiguratie niet zal veranderen):

myDbContext.Configuration.UseDatabaseNullSemantics = true;


  1. Hoe MySQL-database te herstellen van .myd-, .myi-, .frm-bestanden

  2. Meer showplan-verbeteringen? Ja graag!

  3. Voer een PostgreSQL .sql-bestand uit met behulp van opdrachtregelargumenten

  4. Databasekeuze voor het maken van twee gekoppelde tabellen?