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

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

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

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

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

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

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

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

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

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

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


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