sql >> Database teknologi >  >> RDS >> Sqlserver

Hvorfor genererer EF SQL-forespørgsler med unødvendige nul-tjek?

Indstil UseDatabaseNullSemantics = true;

  • Når UseDatabaseNullSemantics == true , (operand1 == operand2) vil blive oversat som:

    WHERE operand1 = operand2
    
  • Når UseDatabaseNullSemantics == false , (operand1 == operand2) vil blive oversat som:

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

Dette er dokumenteret af Microsoft:

Henter eller indstiller en værdi, der angiver, om databasenul-semantik udvises, når to operander sammenlignes, som begge er potentielt nullbare. Standardværdien er falsk.

Du kan indstille det i din DbContext underklassekonstruktør, som sådan:

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

Eller du kan også indstille denne indstilling til din dbContext forekomst udefra som kodeeksemplet nedenfor, fra mit synspunkt (se @GertArnold-kommentaren), vil denne tilgang være bedre, fordi den ikke ændrer standarddatabasens adfærd eller konfiguration):

myDbContext.Configuration.UseDatabaseNullSemantics = true;


  1. Hvordan kan jeg liste alle fremmednøgler, der refererer til en given tabel i SQL Server?

  2. Almindelige Postgres-opgaver på CentOS 7

  3. MariaDB LCASE() Forklaret

  4. MySQL fejlkode:1175 under OPDATERING i MySQL Workbench