我在Oracle上使用Fluent NHibernate,我的問題是我必須在每個條件中的每個字符串上應用lower()函數。我用我自己的方言,而不是甲骨文低功能正在使用nls_lower。數據庫主要由Microsoft Dynamics AX使用,此功能可提高性能。在這樣的標準查詢中,一切工作正常:如何在NHibernate中引用SQL函數?
session.QueryOver<User>()
.Where(x => x.Name.lower() == userName.lower())
.SingleOrDefualt<User>();
但是我怎麼能在引用中應用這個lower()函數?我找不到適合這個的東西,我期望它可以以某種方式完成。我希望在映射類是這樣的,但我不能找到它:
References<Settings>(x => x.Settings)
.Column("SettingId").lower();
我不想我的字符串立即轉換爲小寫,但我真的需要生成這樣的查詢:
select * from User where nls_lower(Name) == nls_lower("somename");
謝謝!
我知道這不是註冊功能。就像我說過的,我創建了Oracle10gDialect的子類,並在其中註冊了該函數並覆蓋了標準的低級函數。這適用於標準查詢。問題是我如何使用sql函數(在這種情況下nls_lower)從引用生成的查詢。 – oFce
@oFce:抱歉我遲到的回覆。在我的回答中,我向您展示了您可以在QueryOver中使用它的方式。還沒有嘗試過,但它應該工作。 – LeftyX
感謝您的回覆。這將生成僅適用於屬性Name的nls_lower。我想要它的所有字符串屬性。例如我有設置實體引用實體用戶。對於這2個SQL查詢將被生成 - 實體用戶和實體設置受用戶ID限制。我希望在實體設置條件下應用nls_lower。 – oFce