Невозможно сравнить строки во время nHibernate QueryOver

У меня есть простой способ проверить пользователей при входе в систему, и я использую Fluent nHibernate для сохранения, поэтому я, естественно, реализую ISession.QueryOver для выполнения этой работы.

Это похоже на следующее.

var member = session.QueryOver<Member>()
   .Where(m => m.Email == Model.Email)
   .Take(1).SingleOrDefault();

Хорошо. Итак, проблемы.

  1. Адреса электронной почты всегда нужно сравнивать без учета регистра.

Они должны всегда быть в базе данных в нижнем регистре. Я приложил огромные усилия, чтобы это произошло. Фактически, мой , который принимает адрес электронной почты , имеет правило проверки, разрешающее только строчные буквы. Но этого все еще недостаточно, я хочу сделать это еще глубже и убедиться, что все кошерное.

Я попытался сделать это ...

var member = session.QueryOver<Member>()
   .Where(m => String.Compare
         (m.Email, Model.Email, StringComparison.OrdinalIgnoreCase) == 0)
   .Take(1).SingleOrDefault();

У меня исключение, что nhibernate не может использовать String .Сравнить метод .

Я понимаю, что могу решить эту проблему с помощью простого метода ToLower () , но могут быть ситуации, когда мне нужно немного больше детализации по сравнению с другими видами сравнений.

Может ли кто-нибудь помочь мне понять, как это обойти?

6
задан Ciel 16 July 2011 в 19:00
поделиться