PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Entity Framework-Kern – enthält Groß-/Kleinschreibung oder Groß-/Kleinschreibung?

Früher war dies bei älteren Versionen von EF Core der Fall. Jetzt string.Contains unterscheidet zwischen Groß- und Kleinschreibung und zum Beispiel für sqlite wird es der sqlite-Funktion `instr()' zugeordnet (ich weiß es nicht für postgresql).

Wenn Sie Zeichenfolgen ohne Berücksichtigung der Groß-/Kleinschreibung vergleichen möchten, haben Sie DbFunctions, um die Arbeit zu erledigen.

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

UPDATE an @Gert:

Ein Teil der Annahme in der Frage ist falsch. string.Contains wird NICHT in einen LIKE expression umgewandelt obwohl es früher in ef-Core-Versionen <=1.0 der Fall war (glaube ich).

  • Im SQLServer string.contains konvertiert in CHARINDEX() , in Oracle und sqlite in instr() die standardmäßig zwischen Groß- und Kleinschreibung unterscheiden, ES SEI DENN, die Sortierung von Datenbanken oder Spalten ist anders definiert (wieder weiß ich es nicht für postgresql).
  • In allen Fällen EF.Functions.Like() konvertiert in ein SQL LIKE Ausdruck, bei dem die Groß-/Kleinschreibung standardmäßig nicht beachtet wird, es sei denn, die DB- oder Spaltensortierung ist anders definiert.

Also ja, es läuft alles auf die Sortierung hinaus, aber - korrigieren Sie mich, wenn ich falsch liege - in gewisser Weise kann der Code einen Einfluss auf die Suche mit Berücksichtigung der Groß-/Kleinschreibung haben, je nachdem, welche der oben genannten Methoden Sie verwenden.

Jetzt bin ich vielleicht nicht ganz auf dem neuesten Stand, aber ich glaube nicht, dass EF-Core-Migrationen auf natürliche Weise mit der DB-Sortierung umgehen, und wenn Sie die Tabelle nicht bereits manuell erstellt haben, erhalten Sie am Ende die Standardsortierung (Groß- und Kleinschreibung für sqlite und I weiß ehrlich gesagt nicht für die anderen).

Um auf die ursprüngliche Frage zurückzukommen, Sie haben mindestens 2 Optionen, um diese Suche ohne Berücksichtigung der Groß-/Kleinschreibung durchzuführen, wenn nicht 3 in einer zukünftigen Version:

  1. Spezifizieren Sie die Spaltensortierung bei der Erstellung mit DbContext.OnModelCreating() mit diesem Trick
  2. Ersetzen Sie Ihre string.Contains durch EF.Functions.Like()
  3. Oder warten Sie auf ein vielversprechendes Feature, das noch diskutiert wird:EF.Functions.Collate() Funktion