2008-08-28 5 views
5

Я новичок в NHibernate (мой первый большой проект с ним).
Я использовал простой способ доступа к данным, создав объект ISession в блоке using, чтобы выполнить захват моего объекта или списка объектов, и таким образом сеанс был уничтожен после выхода из блока кода.Лучший способ управлять сеансом в NHibernate?

Это не работает в ситуации, когда требуется ленивая загрузка.
Например, если у меня есть объект Customer, у которого есть свойство, которое представляет собой коллекцию Orders, то при попытке ленивой загрузки я получаю исключение Hibernate.
Кто-нибудь использует другой метод?

ответ

6
+0

Просто записка, несколько месяцев спустя. Хотя мы все еще используем вышеприведенные подходы, по большей части, более интересная работа, выполняемая людьми, работающими над использованием инструмента МОК для управления «ISessions» и «ISessionFactory», может захотеть проверить StructureMap и FubuMvc проектов для получения дополнительной информации. – 2009-05-15 12:44:04

1

Держите свою сессию открытой для всей единицы работы. Если ваш сеанс слишком мал, вы не можете извлечь выгоду из кеша уровня сеанса (что немаловажно). Каждый раз, когда вы можете предотвратить обратную пересылку в базу данных, это сэкономит много времени. Вы также не можете воспользоваться ленивой загрузкой, что очень важно для понимания.

Если продолжительность сеанса слишком велика, вы можете столкнуться с другими проблемами.

Если это веб-приложение, вы, вероятно, отлично справитесь с шаблоном session-per-httpRequest. В основном это HttpModule, который открывает сеанс в начале запроса и сбрасывает/закрывает его в конце. Обязательно сохраните сеанс в HttpContext.Items NOT STATIC VARIABLE. < --- приводит ко всем видам проблем, с которыми вы не хотите иметь дело.

Вы также можете посмотреть RhinoCommons для выполнения единицы работы.

+0

Я видел много примеров этого метода управления сессиями для веб-приложений, но получение его для работы с winforms - это еще одна история. Билли МакКафферти делает все возможное, но не дает никаких советов, как использовать его фреймворк в winforms. В частности, когда начинать и очищать транзакцию в winforms. – 2011-01-28 16:44:49

2

ЗАКАНЧИВАТЬ SummerOfNHibernate веб-трансляции для большого учебника ... Что вы ищете конкретно не придет до тех пор, пока Webisode 5 или 6.

Смежные вопросы