2
是否可以擴展NHibernate以添加對數據庫系統特有的聚合函數的支持?我有一些使用PostgreSQL中的array_agg()函數(以及其他)的查詢,我想將其轉換爲HQL/ICriteria。擴展NHibernate以支持聚合函數
謝謝!
是否可以擴展NHibernate以添加對數據庫系統特有的聚合函數的支持?我有一些使用PostgreSQL中的array_agg()函數(以及其他)的查詢,我想將其轉換爲HQL/ICriteria。擴展NHibernate以支持聚合函數
謝謝!
是的。這是可能的。
請看: 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
這是否意味着我僅限於HQL?我想我可以將它與ICriteria結合起來。 – csano 2011-04-04 19:51:00
不,不,它也應該符合標準。我會更新我的答案。 – Marcote 2011-04-04 20:17:36
太好了,謝謝,我很感激! – csano 2011-04-04 20:23:48