Расширение NHibernate для поддержки агрегатных функций - PullRequest
2 голосов
/ 04 апреля 2011

Можно ли расширить NHibernate, добавив поддержку агрегатных функций, уникальных для системы баз данных? У меня есть несколько запросов, которые используют функцию array_agg () (и другие) в PostgreSQL, которую я хотел бы преобразовать в HQL / ICriteria.

Спасибо!

1 Ответ

4 голосов
/ 04 апреля 2011

Да. Это возможно.

Посмотрите: http://ayende.com/Blog/archive/2006/10/01/UsingSQLFunctionsInNHibernate.aspx

Вы могли бы сделать что-то вроде этого:

public class MyDialect : PostgreSQLDialect
{
       public MyDialect()
       {
              RegisterFunction("dbo.myfunction", new
              StandardSQLFunction(NHibernateUtil.String));
       }
}

Тогда вы можете использовать myfunction в своих инструкциях HQL. Вам просто нужно зарегистрировать диалект в вашей конфигурации NH.

Edit:

Хорошие новости, это должно работать и для запросов Criteria.

Это код (из Reflector) в 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.

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...