Управление сеансами NHibernate в ASP.NET MVC

Статически типизированные языки

Язык статически типизирован, если тип переменной известен во время компиляции. Для некоторых языков это означает, что вы, как программист, должны указать тип каждой переменной (например: Java, C, C ++); другие языки предлагают некоторую форму вывода типа , способность системы типов выводить тип переменной (например, OCaml, Haskell, Scala, Kotlin)

Основное преимущество здесь всевозможные проверки могут выполняться компилятором, и поэтому на ранней стадии улавливается множество тривиальных ошибок.

Динамически типизированные языки

Язык динамически набирается, если тип связан со значениями времени выполнения, а не с именами переменных / полей / и т. д. Это означает, что вы, как программист, можете писать немного быстрее, потому что вам не нужно указывать типы каждый раз (если не использовать статически типизированный язык с выводом типа ). Пример: Perl, Ruby, Python

Большинство языков сценариев имеют эту функцию, так как нет никакого компилятора для статической проверки типов в любом случае, но вы можете найти ошибку, вызванную неправильным интерпретатором интерпретатора тип переменной. К счастью, скрипты имеют тенденцию быть маленькими, поэтому у ошибок не так много мест, чтобы скрыть.

Большинство динамически типизированных языков позволяют вам предоставлять информацию о типе, но не требуют этого. Один язык, который в настоящее время разрабатывается, Rascal , использует гибридный подход, позволяющий динамическую типизацию внутри функций, но обеспечивающий статическую типизацию для сигнатуры функции.

28
задан Kevin Pang 13 December 2008 в 00:17
поделиться

5 ответов

Вы не должны обертывать свой ISession в оператор использования - точка передачи ISessionBuilder в конструктора репозитория (внедрение зависимости) - то, что код вызова ответственен за управление жизненным циклом ISession. Путем обертывания его в использование Расположите (), назван на ISession, и Вы не будете в состоянии к ленивым элементам объекта загрузки или сохраните его.

Мы делаем что-то подобное, просто передав в ISession конструктору репозитория. Код г-на Palermo, насколько я понимаю, просто добавляет ленивую инициализацию ISession. Я не думаю, что это необходимо потому что, почему был бы Вы новый репозиторий, если Вы не собираетесь использовать его?

37
ответ дан Jamie Ide 14 October 2019 в 10:57
поделиться

Я не открыл бы и закрыл бы сеансы по каждому запросу данных к NHibernate. Я пользовался бы библиотеками Unit of Work, что многие другие предлагают или делают еще некоторое чтение. NHForge.org начинает, и я полагаю, что существуют некоторые методы при установке NHibernate для общего веб-приложения.

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

Путем закрывания сеанса как это, вышеупомянутый сценарий не был бы возможен.

могло бы быть что-то, что продолжает транзакции также.

1
ответ дан Min 14 October 2019 в 10:57
поделиться

С ASP.NET MVC Вы хотите удостовериться, что жизнь сессии сохраняется во время Метода действия для Вашего контроллера, как, как только Ваш контроллер вышел, все Ваши данные должны быть собраны. Я не уверен, поможет ли этот механизм с этим.

Вы могли бы хотеть изучить S#arp Architechure, который является рядом библиотек и руководства созданием ASP.NET приложение MVC с помощью nHibernate. http://code.google.com/p/sharp-architecture/

10
ответ дан JoshBerke 14 October 2019 в 10:57
поделиться

Это та установка, которую я использовал после того, как изучил это подробнее. Кажется, отлично работает, и у него нет той раздражающей привычки создавать ISession для запросов статических файлов, как в большинстве других руководств:

http://www.kevinwilliampang.com/2010/04/06/setting-up-asp -net-mvc-with-fluent-nhibernate-and-structuremap /

3
ответ дан 28 November 2019 в 03:11
поделиться

Только что нашел чистое решение, используя Unity для инъекции сессии на запрос:

http://letsfollowtheyellowbrickroad.blogspot.com/2010/05/nhibernate-sessions-in-aspnet-mvc.html

1
ответ дан 28 November 2019 в 03:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: