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) - возможно, это может вам помочь.