Совет по управлению сессиями NHibernate - PullRequest
6 голосов
/ 29 декабря 2010

Мне нужен совет по управлению сессиями NHibernate для приложения C # WinForms.

В настоящее время я портирую приложение для использования NHibernate. Я также использую шаблон UnitOfWork, как описано в ссылке ниже;

http://nhforge.org/wikis/patternsandpractices/nhibernate-and-the-unit-of-work-pattern.aspx

Мой вопрос относится к сессиям.

  1. Может ли быть запущен только один сеанс для каждого потока?

  2. У меня есть сценарий, в котором Сессия (UnitOfWork) может быть открыта для формы, отображаемой приложением, но пользователь открывает другую форму (т. Е. Инструменты - Опции), для которой я хотел бы иметь свой собственный UnitOfWork. Очевидно, что в этом случае было бы более целесообразно открыть другой сеанс для формы «Инструменты - Опции» и не использовать текущий открытый сеанс для базовой формы.

  3. Можем ли мы иметь словарь сессий в одном потоке?

Любые советы по управлению сессиями приветствуются.

Ответы [ 2 ]

4 голосов
/ 29 декабря 2010

+ 1 о том, что сказал Джей.Я бы также порекомендовал прочитать статью Орен Эйни о Создание настольного приложения для работы с NHibernate :

http://msdn.microsoft.com/en-us/magazine/ee819139.aspx

В нем используется технология WPF, ноон говорит (относительно NHibernate в настольных приложениях) в равной степени относится к WinForms.

3 голосов
/ 29 декабря 2010

1 - Вы можете иметь столько сеансов, сколько требуется в вашем случае использования.

2 - Отлично, на основании 1.

3 - Вы можете поместить переменные сеанса в словарь или любую другую коллекцию.

Чего не следует делать, если вы действительно не знаете, что делаете и почему:

  • использовать один и тот же сеанс в нескольких потоках
  • передача сущностей из одного сеанса / UoW в другой
  • попытка повторно использовать сеанс, вызвавший исключение (не делайте этого, даже если вы думаете, что знаете, что делаете)
...