扩展NHibernate以支持聚合函数

时间:2011-04-04 18:13:41

标签: nhibernate postgresql

是否可以扩展NHibernate以添加对数据库系统特有的聚合函数的支持?我有一些查询使用PostgreSQL中的array_agg()函数(和其他函数),我想将其转换为HQL / ICriteria。

谢谢!

1 个答案:

答案 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