[nHibernate][WinForms][WPF] Область действия сессии
От: Аноним  
Дата: 19.06.11 18:24
Оценка:
Хотелось узнать у многоуважаемого All best practice в использовании nHibernate с WinForms либо WPF приложениями, которые активно отображают/редактируют данные из БД посредством байндинга.
Где начинается и заканчивается область действия сессии nHibernate? То, что есть разные подходы и наиболее оптимальный это использование сессии в качестве UnitOfWork это понятно. Проблемы начинаются на этапе байндинга, когда не используются Not.LazyLoad(), и сессия уже закрыта, а байндинг только начинается...
Что посоветуете? Читал блоги, читал гугл, читал статьи... В основном все посвящено Web приложениям, но там все до тупости примитивно, так как область действия сессии — страница. А тут, с пользовательскими контролами и т.п. все намного интересней.

21.06.11 12:43: Перенесено модератором из '.NET' — TK
nhibernate session
Re: [nHibernate][WinForms][WPF] Область действия сессии
От: Aviator  
Дата: 20.06.11 08:42
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Хотелось узнать у многоуважаемого All best practice в использовании nHibernate с WinForms либо WPF приложениями, которые активно отображают/редактируют данные из БД посредством байндинга.

А>Где начинается и заканчивается область действия сессии nHibernate? То, что есть разные подходы и наиболее оптимальный это использование сессии в качестве UnitOfWork это понятно. Проблемы начинаются на этапе байндинга, когда не используются Not.LazyLoad(), и сессия уже закрыта, а байндинг только начинается...
А>Что посоветуете? Читал блоги, читал гугл, читал статьи... В основном все посвящено Web приложениям, но там все до тупости примитивно, так как область действия сессии — страница. А тут, с пользовательскими контролами и т.п. все намного интересней.

UI надо привязывать к ViewModel, на которую отображаются загруженные через ORM объекты доменной модели. А вообще есть неплохая статья здесь.
Re: [nHibernate][WinForms][WPF] Область действия сессии
От: vansha Украина korneliuk.blogspot.com
Дата: 02.07.11 17:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Хотелось узнать у многоуважаемого All best practice в использовании nHibernate с WinForms либо WPF приложениями, которые активно отображают/редактируют данные из БД посредством байндинга.


Поищите по фразе session per business transaction. Такой подход рекомендует разработчик NHibernate Fabio Maulo.

В одном проекте мы использовали такой подход, и все вроде как роботает. Но, пожалуй, его недостатком является то, что он не всегда очевиден, появляется инфраструктурный код, какие то новые абстракции.

Я бы посоветовал вместо классов предметной области (которые мапятся на БД) использовать в GUI специальные DTO или ViewModel классы, которые грузятся напрямую из БД с помощою NHibernate projections (или вообще загружать эти новые классы не используя NHibernate). То есть после загрузки, сессию NHibernate можно закрывать. Но тогда, изменять данные уже нельзя просто изменив состояние объекта — нужно использовать специальные команды для изменения.
nhibernate session management
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.