единица работы и сеанс на запрос в nhibernate и asp.net mvc

Я использовал фреймворк ncommon (http://code.google.com/p/ncommon/) с помощью nhibernate и asp.net mvc. Мне очень нравится реализация шаблона единицы работы, но у меня проблемы с отложенной загрузкой в ​​представлениях. Я ищу, как реализовать шаблон сеанса для каждого запроса с ncommon или смотрю на другую структуру, которая будет поддерживать:

  1. linq в nhibernate
  2. образец единицы работы
  3. шаблон сеанса на запрос для поддержки отложенной загрузки в представлениях

Любые советы очень ценятся.


person Samuel Goldenbaum    schedule 29.11.2009    source источник


Ответы (2)


Взгляните на SharpArchitecture.net, чтобы найти отличный фреймворк для MVC на основе NHibernate, который, я считаю, будет соответствовать вашим спецификациям.

person Michael Gattuso    schedule 29.11.2009
comment
Спасибо, Майкл. Я знаю фреймворк резкой архитектуры, но считаю, что это похоже на использование атомной бомбы, чтобы убить мышь ;-) Если я помню, резкая архитектура не использует провайдера linq - person Samuel Goldenbaum; 30.11.2009
comment
Ха. Вы, наверное, правы насчет атомной бомбы! Однако у острой арки есть провайдер nhibernate linq. - person Michael Gattuso; 30.11.2009
comment
Похоже, вы закрываете сессию на ближайшее время. При использовании метода «сеанс на запрос» вы открываете сеанс в контексте HttpApplication в Application_BeginRequest и закрываете его в Application_EndRequest. Вы можете сделать это в Global.asax. Исходный код Sharp Architectures может дать вам несколько идей, как это сделать :-) - person Michael Gattuso; 30.11.2009
comment
Спасибо, Майкл - собираюсь еще раз взглянуть на остроумную архитектуру и опубликую результаты - person Samuel Goldenbaum; 03.12.2009

Прежде всего, если вы используете свои сущности в своей модели представления, вы делаете это неправильно. Мне жаль, что вы нарушили это, но вы действительно не можете использовать свою модель базы данных в своих представлениях. Если у меня есть, например, объект Competition в базе данных, я могу получить 3-4 CompetitionView в зависимости от того, что мне нужно. Обычно я загружаю все, что мне может понадобиться, и отправляю только то, что требуется для этого конкретного представления.

Сначала мне показалось, что это больше работы, чем попытка решить эту проблему с помощью NHibernate, но в конце концов я обнаружил, что сразу же получаю огромное количество времени. Существует также проект с открытым исходным кодом под названием AutoMapper, который может передавать данные между различными объектами в ваши разные модели.

Надеюсь, это поможет, и вы не отчаиваетесь, используя передовой опыт!

person mhenrixon    schedule 29.11.2009
comment
Спасибо за ответ. Я использую объекты домена в своих представлениях. Не уверен, что я понимаю это утверждение о модели базы данных в моих представлениях. Как говорится в вопросе, мне нужно лениво загружать свои представления и не хочу загружаться с нетерпением. Есть причина, по которой ORM имеют эту функцию. Активная загрузка некоторых из моих деревьев приведет к снижению производительности и отправит клиенту много ненужных данных. - person Samuel Goldenbaum; 30.11.2009
comment
Вы действительно не можете использовать свою модель базы данных в своих представлениях - это немного широко. Если вы используете один объект или подмножество объекта, нет необходимости создавать модель представления. Я согласен с тем, что сложное представление, в котором есть несколько различных классов объектов или форм с раскрывающимися списками и т. Д., Которые необходимо заполнить, затем полностью создает модели представления. - person Michael Gattuso; 30.11.2009