Вопрос

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

Первоначально мы использовали паттерн сеанса-прорезок с nhibernate и activerecord, используя on_beginrequest / on_endrequest в httpapplication для создания и утилизации сеанса. Позже мы поняли, что любые исключения, связанные с DB, были выброшены за пределы нашего монорельсового контекста, что означает, что наши спасения не начались. Как еще одна сторона, у нас не было возможности полностью пропустить создание сеансов Nhibernate в любой действие, которое в некоторых случаях было бы желательным.

Таким образом, мы переписываем его для создания сеансов в инициализации () / контекстуализации () в нашем базовом контроллере и распорядились в распоряжении () нашего базового контроллера. Мы также откатываемся от сеанса в нашем спасательном контроллере, чтобы предотвратить любые половины написанных изменений в БД. Все идет нормально. Причина для выполнения этого в Dispose () заключается в том, что мы хотим, чтобы он проходил через съемки видопроизводства из-за причинах ленивого загрузки, а также в качестве ViewComponents, которые должны получить сеанс (мы могли бы переключиться на подразделения для работы для ViewComponents, но, похоже, у них нет распоряжения () ...)

Тем не менее, я сталкиваюсь с некоторыми проблемами тупика, когда мы начали трансцинации в БД, которые не обрабатывают и не преданы, и я не могу понять это, в основном из -за беспорядка, который мы сделали с этим подходом. Анкет

Итак, я нашел эту статью: http://hackingon.net/post/nhibernate-session-per-request-with-aspnet-mvc.aspx

И я подумал: «Фильтры, мы можем использовать это тоже в монорельсе!», Потому что это может начать BeforeAction и после завершения.

Мои вопросы тогда:

  1. Что произойдет, если в фильтре происходит исключение?
  2. Будет ли после съемки стрельбы, даже если в действии или рендеринге происходит исключение?
  3. Вы бы порекомендовали этот подход, если нет, то каковы ваше предложение?

Любые указатели очень ценят!

Это было полезно?

Решение

  1. Вам нужен обработчик ошибок приложения для ухода за обработкой исключений.

  2. Прикрепите отладчика и узнайте.

  3. Вероятно, нет (хотя это моя статья). Это не работает с рендерингом. Лучше всего использовать контейнер IOC для управления сроком службы соединений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top