2009-11-23 6 views
0

У меня есть клиентское серверное приложение, на сервере используется nhibernate. Я хочу знать, как использовать сессию? за звонок? на одного клиента? сингл?Правильное использование сеанса nhibernate

другой способ?

и как я могу хранить кеш сеанса на сервере? , а также я хочу знать, является ли сеанс потокобезопасным?

ответ

7

Вы должны использовать один сеанс на единицу работы. Если это включает в себя несколько операций, пусть будет так.

Используйте сеанс.BeginTransaction(), чтобы обернуть блок работы и зафиксировать, как только все элементы будут выполнены.

Сессии НЕ являются потокобезопасными, но фабрика сеансов (которую вы определенно хотите сохранить).

У NHiberate есть различные параметры кеша для данных, но сеансы предназначены для использования и утилизации.

+0

Есть ли способ сохранить кеш после сеанса? –

+1

У Ayende есть несколько хороших ссылок на то, как кэширование реализовано в NHibernate. Для объектов только для чтения (например, таблицы поиска) вы можете получить хорошую выгоду, если вы их часто читаете. В противном случае ваши требования параллелизма могут помешать вам хранить кешированные данные. Это зависит от вопроса. Статья Айенде - http://ayende.com/Blog/archive/2009/04/24/nhibernate-2nd-level-cache.aspx –

1

За звонок должно быть обычное решение

3

Обычно это делается по запросу. Вы можете создать HttpApplication, который открывает сеанс в начале запроса и закрывается в конце запроса (example).

1

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

Чтобы сохранить кеш, вы должны поддерживать сеанс. Скорее всего, будет довольно сложно сохранить кеш и сохранить кеш в чем угодно, кроме простых однопользовательских приложений с одним процессом.

1

Есть отличный пример, который я использовал от NHibernate Best Practices.

В примере кода используется сеанс для каждого запроса ASP.NET.

Смежные вопросы