我在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