Как объединить сеансы и транзакции NHibernate в приложении WPF

Я относительно новичок и для WPF, и для NHibernate, и для создания приложения, которое объединяет два, используя шаблон MVVM. Тем не менее, я изо всех сил пытаюсь понять, когда и где мое приложение должно открывать и закрывать сеансы и транзакции NHibernate.

Из того, что я прочитал, рекомендуется, чтобы сессии были максимально короткими. Поэтому, помимо очевидных соображений безопасности потоков, я предполагаю, что неправильно открывать сеанс на уровне приложения и делиться им? С другой стороны, я также понимаю, что очень короткие сессии (в рамках бизнес-методов) приведут к отсоединенным объектам, а также не позволят мне использовать ленивую загрузку NHibernate. Является ли это нормальным и неизбежным способом разработки приложения WPF/NH?

К сожалению, все хорошие примеры кода (и единственная книга, которую я могу найти на эту тему - NHibernate in Action), ориентированы на приложения ASP.NET, где наилучшая практика, по-видимому, довольно четкая: сеанс и транзакционный интервал точно один запрос Http.

Итак, я был бы признателен за некоторые рекомендации разработчиков WPF, чтобы помочь мне понять управление сеансами в WPF (идеально указывая на некоторые хорошие образцы кода).

Большое спасибо,

Тим

Ответы