sql >> Databasteknik >  >> RDS >> PostgreSQL

Entity Framework core - Innehåller är skiftlägeskänsligt eller skiftlägesokänsligt?

Det brukade vara fallet för äldre versioner av EF-kärna. Nu string.Contains är skiftlägeskänslig, och till exempel för sqlite mappas den till sqlite-funktionen `instr()' (jag vet inte för postgresql).

Om du vill jämföra strängar på ett skiftlägesokänsligt sätt har du DbFunctions för att göra jobbet.

context.Counties.Where(x => EF.Functions.Like(x.Name, $"%{keyword}%")).ToList();

UPPDATERING till @Gert:

En del av antagandet i frågan är felaktigt. string.Contains konverterar INTE till ett LIKE expression även om det brukade vara fallet i ef kärnversioner <=1.0 (tror jag).

  • I SQLServer string.contains konverterar till CHARINDEX() , i oracle och sqlite till instr() som är skiftlägeskänsliga som standard OM INTE db eller kolumnkollation definieras på annat sätt (Återigen, jag vet inte för postgresql ).
  • I alla fall EF.Functions.Like() konverterar till en SQL LIKE uttryck som är skiftlägesokänsligt som standard om inte db- eller kolumnsortering har definierats på annat sätt.

Så ja, allt går ner till sammanställning men - rätta mig om jag har fel - på ett sätt kan koden påverka den skiftlägeskänsliga/okänsliga sökningen beroende på vilken av ovanstående metoder du använder.

Nu kanske jag inte är helt uppdaterad men jag tror inte att EF-kärnmigreringar hanterar DB-sortering naturligt och om du inte redan har skapat tabellen manuellt kommer du att sluta med standardsorteringen (skiftlägeskänslig för sqlite och jag vet ärligt talat inte för de andra).

För att återgå till den ursprungliga frågan har du minst två alternativ för att utföra denna skiftlägesokänsliga sökning om inte tre i en framtida version:

  1. Ange kolumnsamlingen vid skapande med DbContext.OnModelCreating() med detta trick
  2. Byt ut din string.Contains av EF.Functions.Like()
  3. Eller vänta på en lovande funktion som fortfarande diskuteras:EF.Functions.Collate() funktion


  1. Ändras resurs-id varje gång ett program startar

  2. Cross Domain SQL Server-inloggningar med Windows-autentisering

  3. Utforska alternativ för lågprioriterade lås väntan i SQL Server 2014 CTP1

  4. FEL:Ladda lokal data är inaktiverad - detta måste vara aktiverat på både klient- och serversidan