Консультации по управлению сессиями NHibernate
Мне нужен совет по управлению сессиями NHibernate для приложения C# WinForms.
В настоящее время я портирую приложение для использования NHibernate. Я также использую шаблон UnitOfWork, как описано в ссылке ниже;
http://nhforge.org/wikis/patternsandpractices/nhibernate-and-the-unit-of-work-pattern.aspx
Мой вопрос касается сессий.
У вас может быть только одна сессия, запущенная на каждый поток?
У меня есть сценарий, в котором Session (UnitOfWork) может быть открыт для формы, показанной приложением, но пользователь открывает другую форму (т. Е. Инструменты - Опции), для которой я хотел бы иметь свой собственный UnitOfWork. Очевидно, что в этом случае было бы более целесообразно открыть еще один сеанс для формы "Инструменты - Параметры" и не использовать текущий открытый сеанс для базовой формы.
Можем ли мы иметь словарь сессий в одном потоке?
Любые советы по управлению сессиями приветствуются.
2 ответа
+1 на то, что сказал Джей. Я также рекомендовал бы прочитать статью Орен Эйни о создании настольного приложения с помощью NHibernate:
http://msdn.microsoft.com/en-us/magazine/ee819139.aspx
Он использует WPF в качестве технологии пользовательского интерфейса, но все, что он говорит (за исключением NHibernate в настольных приложениях), одинаково актуально для WinForms.
1 - Вы можете иметь столько сеансов, сколько требует ваш вариант использования.
2 - Отлично, на основании 1.
3 - Вы можете поместить переменные сеанса в словарь или любую другую коллекцию.
Чего не следует делать, если вы действительно не знаете, что делаете и почему:
- использовать один и тот же сеанс в нескольких потоках
- передавать объекты из одного сеанса /UoW в другой
- попытаться повторно использовать сеанс, который вызвал исключение (не делайте этого, даже если вы думаете, что знаете, что делаете)