powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate и испорченная сессия
13 сообщений из 13, страница 1 из 1
NHibernate и испорченная сессия
    #37795047
SergASh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!

Документация по NH утверждает, что если сессия где-то генерирует исключение, то дальше ею пользоваться нельзя. Это прекрасно, но как узнать, что сессия перешла в невалидное состояние? Например, если исключение NHibernate.AssertionFailure перехватывается промежуточным слоем и не пробрасывается дальше, я вообще не узнаю о нем. Не говоря уже о том, что перечень возможных типов исключений в документации отсутствует. Есть ли способ спросить прямо у сессии, что она померла?

Спасибо.
...
Рейтинг: 0 / 0
NHibernate и испорченная сессия
    #37795059
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergASh,

Нет. Ловите HibernateException.
...
Рейтинг: 0 / 0
NHibernate и испорченная сессия
    #37795104
SergASh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Одного только HibernateException недостаточно, иногда приходят AssertionFailure, например.
Как я могу быть уверенным, что не будет ещё какого-то третьего типа?
...
Рейтинг: 0 / 0
NHibernate и испорченная сессия
    #37795121
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergASh,

Не покажите ли код, который создаёт такое исключение?
...
Рейтинг: 0 / 0
NHibernate и испорченная сессия
    #37796974
SergASh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SolYUtor,

Если первое HibernateException проигнорировать и вызвать Flush для сессии, то как раз и будет AssertionFailure.
...
Рейтинг: 0 / 0
NHibernate и испорченная сессия
    #37797917
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergASh,

так а что мешает обработать первое? Думаете, на n-ный раз удасться уговорить NHibernate выполнить flush?
...
Рейтинг: 0 / 0
NHibernate и испорченная сессия
    #37800011
SergASh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SolYUtor,

Ну так говорю же, первое исключение обрабатывается в другом слое. Конечно, это не правильно, сессия разрушена и дальнейшая работа невозможна, но как обычно на культурную переделку нужно время, а прямо сейчас надо по-быстрому залатать.
...
Рейтинг: 0 / 0
NHibernate и испорченная сессия
    #37800270
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergASh,

Выбросите после обработки исключение на следующий слой...
...
Рейтинг: 0 / 0
NHibernate и испорченная сессия
    #37801897
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtor,
Вот такой вопрос, если через интерфейс ексепшен вытащить в сущность ( на UI), при комите единицы работы там отломится
ексепшен к сущности, или всей сессии.
Что то запамятовал, давно не пользовал ((
...
Рейтинг: 0 / 0
NHibernate и испорченная сессия
    #37801948
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergASh,

лучше один раз решить правильно. Смысл отлавливать второе исключение? Чтобы потом ловить третье? Как вы собираетесь менять сессию на новую?
...
Рейтинг: 0 / 0
NHibernate и испорченная сессия
    #37801949
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

всей сессии. Идеология в том, что после исключения (особенно если обновление бд. происходило без транзакции), NHibernate не знает в каком состоянии осталась база, и как ее обновлять. Поэтому больше не даёт использовать сессию, в которой случился exception.
Но сделанные в сущности изменения можно сохранить используя session.Merge().
...
Рейтинг: 0 / 0
NHibernate и испорченная сессия
    #37802023
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtor,
Понятно, но все равно неудобство заметное.
Например, для мейка сессии на веб странице нужно бы делать акцессор где мы создаем сессию. (аки синглтон для страницы)
При загрузке страницы произошло исключение ( не фатальное для логики страницы), идем дальше по циклу страницы
при обработке кнопки ( ну образно) нам опять требуется сессия, но она уже грязная,
в акцессоре ее надо пересоздать, а метки что она уже загублена - нет.
Приходится писать код в елочку в обработчике, в верху реальное создание, в низу диспозим сессию...., в прочем так и учат в примерах, но тут мы теряем весь кайф кеша первого уровня..
...
Рейтинг: 0 / 0
NHibernate и испорченная сессия
    #37802564
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степитеряем весь кайф кеша первого уровня
Мы в любом случае его теряем. Если NHibernate выдал ошибку при работе с базой, то скорее всего у нас неправильные данные, и кеш устарел, и пользоваться им нельзя.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate и испорченная сессия
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]