是否可以扩展NHibernate以添加对数据库系统特有的聚合函数的支持?我有一些查询使用PostgreSQL中的array_agg()函数(和其他函数),我想将其转换为HQL / ICriteria。
谢谢!
答案 0 :(得分:4)
是。这是可能的。
看看: http://ayende.com/Blog/archive/2006/10/01/UsingSQLFunctionsInNHibernate.aspx
你可以这样做:
public class MyDialect : PostgreSQLDialect
{
public MyDialect()
{
RegisterFunction("dbo.myfunction", new
StandardSQLFunction(NHibernateUtil.String));
}
}
然后您可以在HQL语句中使用myfunction
。您只需在NH配置中注册Dialect。
编辑:
好消息,这也适用于Criteria查询。
这是PostgreSQLDialect中的代码(来自Reflector)
base.RegisterFunction("iif",
new SQLFunctionTemplate(null, "case when ?1 then ?2 else ?3 end"));
所以在你ICriteria中,你可以这样做:
Projections.SqlFunction("iif", NHibernateUtil.Boolean, foo, bar, baz...
这一切都应该有效,因为你正在扩展NH方言。
HTH