Перезапуск сеанса NHibernate после исключения из базы данных, без CurrentContext - PullRequest
1 голос
/ 19 октября 2011

Согласно http://nhibernate.info/doc/nh/en/index.html#manipulatingdata-exceptions, после исключения из базы данных сеанс следует отбросить.

Теперь в нашем веб-приложении в некоторых случаях нормально генерировать и перехватывать исключения ADOException.Например, для нарушения ограничений.

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

В наших тестах мы делаем это, вызывая

CurrentSessionContext.Unbind(SessionFactory).Close();
CurrentSessionContext.Bind(SessionFactory.OpenSession());

, но в веб-приложении мы не используем CurrentSessionContext, мы используем LazySessionContext .Поэтому мы не можем напрямую ссылаться на CurrentSessionContext в наших бизнес-классах, поскольку он не используется в Интернете, и мы не можем ссылаться на LazySessionContext, поскольку HttpContext недоступен во время интеграционного тестирования.

Есть ли способ удалить и воссоздать сеанс и подключить его к текущему контексту, без прямой ссылки на класс контекста ?У меня есть объект SessionFactory и объект Session.

1 Ответ

0 голосов
/ 19 октября 2011

Не желая звучать критично, я бы посоветовал вам переосмыслить дизайн вашего приложения.Вы должны реализовать интерфейс либо с помощью, например, комбо-полей, либо проверки, которая не позволит пользователям вводить данные, которые могут вызвать исключения ADOException, такие как нарушения ограничений.Если это происходит, то это исключительные обстоятельства, о которых вы можете сообщить своим пользователям как о внутренней ошибке и, возможно, зарегистрировать эту ошибку с помощью отдельного механизма, например, с помощью мониторинга состояния, встроенного в ASP.NET.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...