PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Ядро на Entity Framework - Съдържа, чувствителен ли е главният или малък регистър?

Това беше така за по-старите версии на EF ядрото. Сега string.Contains е чувствителен към малки и големи букви и например за sqlite се преобразува във функцията на sqlite `instr()' (не знам за postgresql).

Ако искате да сравнявате низове по начин, който не е чувствителен към главни букви, имате DbFunctions, които да вършат работата.

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

АКТУАЛИЗИРАНЕ до @Gert:

Част от предположението във въпроса е неправилно. string.Contains НЕ се преобразува в LIKE expression въпреки че беше така в основните версии на ef <=1.0 (мисля).

  • В SQLServer string.contains преобразува в CHARINDEX() , в oracle и sqlite в instr() които са чувствителни към главните букви по подразбиране, ОСВЕН АКО db или колона за сравнение не е дефинирана по друг начин (Отново, не знам за postgresql).
  • Във всички случаи EF.Functions.Like() преобразува в SQL LIKE израз, който по подразбиране не е чувствителен към малки и големи букви, освен ако съпоставянето на db или колони не е дефинирано по друг начин.

Така че, да, всичко се свежда до съпоставяне, но – поправете ме, ако греша – по някакъв начин кодът може да окаже влияние върху търсенето, което е чувствително/нечувствително в зависимост от това кой от горните методи използвате.

Сега може да не съм напълно актуален, но не мисля, че миграциите на ядрото на EF се справят естествено със съпоставянето на DB и освен ако вече не сте създали таблицата ръчно, в крайна сметка ще получите съпоставянето по подразбиране (чувствително малки и големи букви за sqlite и аз честно казано не знам за другите).

Връщайки се към оригиналния въпрос, имате поне 2 опции за извършване на това търсене, независимо от главните букви, ако не и 3 в бъдеща версия:

  1. Посочете съпоставянето на колони при създаване с помощта на DbContext.OnModelCreating(), като използвате този трик
  2. Заменете вашия string.Contains от EF.Functions.Like()
  3. Или изчакайте обещаваща функция, която все още се обсъжда:EF.Functions.Collate() функция


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преброяване на броя на поява на подниз в рамките на низ в PostgreSQL

  2. PostgreSQL - задайте стойност на клетка по подразбиране според стойност на друга клетка

  3. Как да актуализирате множество колони в PostgreSQL

  4. Laravel:Грешка [PDOException]:Не можа да се намери драйвер в PostgreSQL

  5. Въведение в PostgreSQL