2011-04-04 116 views
2

是否可以擴展NHibernate以添加對數據庫系統特有的聚合函數的支持?我有一些使用PostgreSQL中的array_agg()函數(以及其他)的查詢,我想將其轉換爲HQL/ICriteria。擴展NHibernate以支持聚合函數

謝謝!

回答

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配置中註冊方言。

編輯:

好消息,這也適用於標準查詢。

這是PostgreSQLDialect

代碼(從反射鏡)
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

+0

這是否意味着我僅限於HQL?我想我可以將它與ICriteria結合起來。 – csano 2011-04-04 19:51:00

+0

不,不,它也應該符合標準。我會更新我的答案。 – Marcote 2011-04-04 20:17:36

+0

太好了,謝謝,我很感激! – csano 2011-04-04 20:23:48