NHibernate только с хранимыми процедурами - PullRequest
2 голосов
/ 20 марта 2010

Я бы хотел, чтобы NHibernate вызывал хранимую процедуру при вызове ISession.Get для извлечения сущности по ее ключу вместо использования динамического SQL.

Мы использовали NHibernate и позволяли ему генерировать наш SQL для запросов и вставок / обновлений / удалений, но теперь, возможно, придется развернуть наше приложение в среде, которая требует от нас использования хранимых процедур для доступа ко всем базам данных. Мы можем использовать sql-insert, sql-update и sql-delete в наших файлах отображения .hbm.xml для вставок / обновлений / удалений. Наши hql и критерии запросов должны быть заменены вызовами хранимых процедур.

Однако я не выяснил, как заставить NHibernate использовать пользовательскую хранимую процедуру для извлечения сущности по ее ключу. Я все еще хочу иметь возможность вызывать ISession.Get, например:

using (ISession session = MySessionFactory.OpenSession())
{
    return session.Get<Customer>(customerId);
}

и также ленивые объекты загрузки, но я хочу, чтобы NHibernate вызывал мою хранимую процедуру "GetCustomerById" вместо генерации динамического SQL.

Можно ли это сделать?

Возможно, NHibernate больше не подходит, учитывая эту новую среду, которую мы должны поддерживать.

1 Ответ

3 голосов
/ 20 марта 2010

Я сам не пробовал, но вы можете изучить нативный SQL и пользовательский загрузчик .

Вот хорошая статья Ayende Rahien: Использование NHibernate с хранимыми процедурами

Вот еще одна более простая для понимания версия Скотта МакМастера, основанная на бета-версии NH: Хранимые процедуры в NHibernate

...