Консультации по управлению сессиями NHibernate

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

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

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

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

  1. У вас может быть только одна сессия, запущенная на каждый поток?

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

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

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

2 ответа

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

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

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

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

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

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

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

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