Одна из вещей, которая меня полностью сбивает с толку, - это использование session.Flush в сочетании с session.Commit и session.Close.
Иногда session.Close работает, например, фиксирует все необходимые мне изменения. Я знаю, что мне нужно использовать фиксацию, когда у меня есть транзакция или единица работы с несколькими созданиями / обновлениями / удалениями, чтобы я мог выбрать откат в случае возникновения ошибки.
Но иногда логика session.Flush действительно сбивает меня с толку. Я видел примеры, когда у вас есть session.SaveOrUpdate(), за которым следует флеш, но когда я удаляю флеш, он все равно работает нормально. Иногда я сталкиваюсь с ошибками в операторе Flush, в котором говорится, что время сеанса истекло, и удаление его позволило убедиться, что я не столкнулся с этой ошибкой.
Есть ли у кого-нибудь хорошие рекомендации относительно того, где и когда использовать флеш? Я проверил документацию NHibernate по этому поводу, но до сих пор не могу найти однозначного ответа.