Вы никогда не должны перехватывать исключения и игнорировать их во время транзакции NHibernate.
Я пытаюсь объяснить, почему.
Могут быть исключения, например, вызванные ограничениями в базе данных. (это также может быть вызвано проблемами отображения, исключениями, вызванными свойствами или чем-то еще.) NHibernate пытается синхронизировать состояние в памяти с базой данных. Это делается при фиксации, а иногда перед запросами, чтобы убедиться, что запросы выполняются на реальных данных. Когда эта синхронизация завершается неудачно, состояние в базе данных является случайным , некоторые изменения сохраняются, другие нет. Единственное, что вы можете сделать в этом случае, это закрыть сеанс.
Учтите, что решения и вычисления в вашем коде основаны на значениях в памяти . Но - в случае игнорируемого исключения эти значения не являются значениями в базе данных, они никогда не будут там. Таким образом, ваша логика будет определять и рассчитывать на «фэнтези-данные».
Кстати, никогда не стоит ловить какие-либо исключения (нетипизированные) и игнорировать их . Вы всегда должны знать, какие исключения вы обрабатываете, и быть уверенным, что вы можете продолжить.
То, что вы здесь делаете, - глотание ошибок программирования. Поверьте, система не будет более стабильной. Вопрос только в том, замечаете ли вы ошибку, когда она возникает, или игнорируете ее там и даже сохраняете результат ошибки в базе данных ? Когда вы делаете последнее, вам не нужно удивляться, когда ваша база данных несовместима, и возникает другая ошибка, когда вы пытаетесь получить данные из базы данных. И вы никогда не найдете код, который является действительной причиной ошибки.