Požadavky: Když EF používá linq to sql nebo lambda výrazy k dotazování databáze, SQL příkazy generované EF nám pomohou přidat některé podmínky IS NULL nebo NOT NULL.
Příklad 1:
Generuje SQL příkaz takto:
VYBRAT [Extent2]. [UserStatus] AS [UserStatus], [Extent1]. [Id] AS [Id] FROM [dbo]. [EmailInfo] AS [Extent1] INNER JOIN [dbo]. [Účet] AS [Extent2] NA ([Extent1].[ Adresa] = [Extent2]. [Email]) NEBO (([Extent1].[ Adresa] JE NULL) A ([Extent2].[ E-mail] JE NULL))
Příklad 2:
Generuje SQL příkaz takto:
VYBRAT [Extent1]. [Id] AS [Id], [Extent1]. [Jméno] AS [Jméno], [Extent1]. [ParentId] AS [ParentId], [Extent1]. [Pozice] AS [Pozice], [Extent1]. [_CreateTime] AS [_CreateTime], [Extent1]. [_UpdateTime] JAKO [_UpdateTime] FROM [dbo]. [Klasifikace] AS [Extent1] KDE ([Extent1].[ Název] IN (N'Android', N'Solaris')) A ([extent1].[ Název] NENÍ NULL)
Pokud chcete zabránit tomu, aby EF generoval tyto další NULL podmínky, můžete se podívat na následující.
Konfigurujte vlastnost DbContextConfiguration.UseDatabaseNullSemantics
Získá nebo nastaví hodnotu, která určuje, zda má při porovnání dvou operandů zobrazit databázovou nulovou sémantiku, a oba pravděpodobně budou null. Výchozí hodnota je nepravdivá.
Kód je následující:
Například: Pokud je UseDatabaseNullSemantics pravdivý, pak (operand1 == operand2) bude převedeno na (operand1 = operand2); Pokud je UseDatabaseNullSemantics nepravdivá, bude převedena na (((operand1 = operand2) A (NOT (operand1 JE NULL NEBO operand2 JE NULL))) NEBO (operand1 JE NULL) A (operand2 JE NULL))).
Dokumentace (V popisu dokumentace je chyba):Přihlášení k hypertextovému odkazu je viditelné.
pole pro přidání atributu [Required]
Po přidání atributu [Required] do vlastnosti objektu EF ve skutečnosti nepovoluje, aby atribut (pole) byl v databázi NULL.Po provedení příkazu pro migraci není povoleno být pole NULLProtože pole nesmí být v databázi NULL, EF přirozeně negeneruje některé NULL kontroly v SQL příkazech generovaných pro toto pole.
Odkaz:Přihlášení k hypertextovému odkazu je viditelné.
|