在nHibernate QueryOver< T>期间无法比较字符串. [英] Cannot Compare Strings during nHibernate QueryOver<T>
问题描述
我有一个简单的方法来尝试验证用户登录时的身份,并且我使用Fluent nHibernate
进行持久化,因此我自然实现了ISession.QueryOver<T>
来完成这项工作.
I've got a simple method to try and validate users when they login,and I use Fluent nHibernate
for persistence, so I naturally implement an ISession.QueryOver<T>
to do this work.
如下所示.
var member = session.QueryOver<Member>()
.Where(m => m.Email == Model.Email)
.Take(1).SingleOrDefault();
好的.那么,眼前的问题.
Ok. So then, the problems at hand.
- 电子邮件地址始终需要区分大小写.
它们应该始终在数据库中以小写形式出现.我竭尽全力做到这一点.实际上,我接受Email Address
的<input>
上面有一个验证规则,只允许小写字母.但这还不够好,我想进一步加深并绝对确保所有内容都是犹太洁食.
They should always be in the database as lowercase. I have gone to great pains to make this happen. And in fact, my <input>
that accepts the Email Address
has a validation rule on it to only allow lowercase letters. But that's still not good enough, I want to make this even deeper and make absolutely sure that everything is Kosher.
所以我尝试这样做...
So I tried doing this...
var member = session.QueryOver<Member>()
.Where(m => String.Compare
(m.Email, Model.Email, StringComparison.OrdinalIgnoreCase) == 0)
.Take(1).SingleOrDefault();
我得到一个例外,即nhibernate无法使用String.Compare
方法.
I get an exception that nhibernate cannot use the String.Compare
method.
我意识到我可以用普通的ToLower()
方法来解决这个问题,但是在某些情况下,我希望比其他类型的比较有更多的粒度.
I realize I can solve this with just the plain ToLower()
method, but there may be situations where I want a bit more granularity over other kinds of comparisons.
有人可以帮我弄清楚如何解决这个问题吗?
Can someone help me figure out how to get around this?
推荐答案
使用IsInsensitiveLike可以采用多种方法:
There are multiple ways of doing this, with a IsInsensitiveLike:
var member= Session.QueryOver<Member>()
.WhereRestrictionOn(m=>m.Email).IsInsensitiveLike(Model.Email)
.Take(1).SingleOrDefault();
这篇关于在nHibernate QueryOver< T>期间无法比较字符串.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!