Монорельсовая, нюзиновая и сеанс за просмотр
-
14-10-2019 - |
Вопрос
Мне нужны некоторые идеи и мысли о рефакторинге, которое я собираюсь сделать с нашим веб-приложением.
Первоначально мы использовали паттерн сеанса-прорезок с 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 и после завершения.
Мои вопросы тогда:
- Что произойдет, если в фильтре происходит исключение?
- Будет ли после съемки стрельбы, даже если в действии или рендеринге происходит исключение?
- Вы бы порекомендовали этот подход, если нет, то каковы ваше предложение?
Любые указатели очень ценят!
Решение
Вам нужен обработчик ошибок приложения для ухода за обработкой исключений.
Прикрепите отладчика и узнайте.
Вероятно, нет (хотя это моя статья). Это не работает с рендерингом. Лучше всего использовать контейнер IOC для управления сроком службы соединений.