我有一個簡單的方法來嘗試驗證用戶在登錄時的身份,並且我使用Fluent nHibernate
來實現持久性,所以我自然實現了ISession.QueryOver<T>
來完成此項工作。在nHibernate查詢過程中無法比較字符串<T>
它看起來像下面這樣。
var member = session.QueryOver<Member>()
.Where(m => m.Email == Model.Email)
.Take(1).SingleOrDefault();
好的。那麼,現在的問題。
- 電子郵件地址總是需要比較不區分大小寫。
他們應該總是在數據庫中小寫。我爲此付出了巨大的努力。實際上,接受Email Address
的我的<input>
上有一個驗證規則,只允許小寫字母。但是這還不夠好,我想把它做得更深一些,並且確保一切都是潔淨的。
所以我想這樣做......
var member = session.QueryOver<Member>()
.Where(m => String.Compare
(m.Email, Model.Email, StringComparison.OrdinalIgnoreCase) == 0)
.Take(1).SingleOrDefault();
我得到一個異常的NHibernate不能使用String.Compare
方法。
我意識到我可以用簡單的ToLower()
方法解決這個問題,但可能會出現這種情況,我希望比其他類型的比較更精細一些。
有人可以幫我弄清楚如何解決這個問題嗎?
像爲v不同的比較語義來平等,這帶來了一整套的安全問題發揮 –
[我的回答](http://stackoverflow.com/a/31404628/11635)更醜陋[但嚴重並沒有讓系統開放用戶名枚舉攻擊] –