EF4 Linq Oracle11g делает запросы нечувствительными к регистру
Мы переходим к EF4 и Linq в качестве нашего интерфейса db к Oracle 11g db. База данных настроена как чувствительная к регистру, но нам нужно искать как нечувствительный к регистру. В oracle с использованием "UPPER" в запросе потенциально очень дорого. Я просмотрел следующие параметры с указанными результатами:
ChangeEntities.TABLE.Where(x => x.FIELD.Equals(VARIABLE))
generates SQL Where clause:
WHERE TABLE.FIELD = VARIABLE
---------------------
ChangeEntities.TABLE.Where(x => x.FIELD.Equals(VARIABLE.ToUpper()))
generates SQL Where clause:
WHERE TABLE.FIELD = (UPPER(VARIABLE))
---------------------
ChangeEntities.TABLE.Where(x => x.FIELD.ToUpper().Equals(VARIABLE.ToUpper()));
generates SQL Where clause:
WHERE (UPPER(TABLE.FIELD)) = (UPPER(VARIABLE))
---------------------
ChangeEntities.TABLE.Where(x => x.FIELD.Equals(VARIABLE, StringComparison.CurrentCultureIgnoreCase))
generates SQL Where clause:
WHERE TABLE.FIELD = VARIABLE
-----------------------
Результаты вроде бы говорят сами за себя, за исключением того, что последний пример может действительно пропустить записи.
Есть ли у кого-нибудь другие мысли о методах?
Спасибо, Саммер
Ответы
Ответ 1
Вам нужно либо изменить сортировку столбцов в метаданных БД, либо указать его в запросе. Единственный способ указать его в запросе в EF - использовать методы ESQL или Query Builder. Лучше всего изменить сортировку на самом столбце базы данных.
Ответ 2
Какой поставщик данных вы используете? Попробуйте прочитать эту статью (http://www.orafaq.com/node/91) - возможно, это может вам помочь.