Вопросы о nhibernate - PullRequest
       0

Вопросы о nhibernate

1 голос
/ 16 января 2011

У меня есть пара вопросов о nhibernate.

  1. Я до сих пор не понимаю, что означает контекстная сессия. Я занимаюсь веб-вещанием, поэтому я просто выбираю «веб», но я действительно не знаю, что он делает.

  2. Должен ли я поместить session.BeginTransaction () в Application_BeginRequest?

  3. Должен ли я зафиксировать все в Application_EndRequest? Или я должен совершить, когда это необходимо. Скажем, мне нужно вставить пользователя, а затем в какой-то код позже мне нужно обновить другую таблицу. Должен ли я сделать пользователя и выполнить обновление, а затем зафиксировать или подождать, пока оба будут готовы к отправке?

  4. Если у вас всегда есть session.Rollback () в Application_EndRequest?

  5. Должен ли я session.close () или session.dispose () или оба в Application_EndRequest?

Ответы [ 2 ]

1 голос
/ 16 января 2011
  1. «веб» контекст означает, что может быть только один «текущий» Session на SessionFactory на HttpContext (т.е. на запрос). Вы несете ответственность за связывание / открепление.

  2. Не вдаваясь слишком глубоко, я бы сказал, что это нормально, если вы хотите приравнять 1 запрос == 1 транзакция.

  3. Помните, что сессия - это единица работы. Хотя вы могли бы иметь несколько транзакций в одном запросе, это не очень распространено, поэтому я бы сказал, что вы должны фиксировать EndRequest, если не было ошибки (сохраняя ее в соответствии со вторым вопросом)

  4. Не обязательно. Вы можете позвонить, если есть ошибка, хотя ее удаление будет иметь тот же эффект.

  5. Утилизировать достаточно.

0 голосов
/ 16 января 2011

Информацию о контекстных сессиях можно найти по этой ссылке .

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

Как правило, рекомендуется использовать шаблон проектирования DAO для Hibernate в сочетании с каким-либоменеджер сессий, который даст вам одноэтапную сессию.

Я очень рекомендую прочитать эту статью о сессиях и транзакциях Hibernate.Он объясняет то, о чем я только что говорил, более подробно и обсуждает, как реализовать шаблон DAO.

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