Это правильный шаблон использования NHibernate:
using (ISession session = sessionFactory.OpenSession())
using (ITransaction transaction = session.BeginTransaction())
{
//Do the work here
transaction.Commit();
}
Все это требуется для того, чтобы все работало должным образом (если вы не используете дополнительную инфраструктуру)
Закрытие сеанса или выполнение каких-либо действий с транзакцией, кроме фиксации, является избыточным, так как Dispose
методы сеанса и транзакция заботятся об очистке, включая откат в случае возникновения ошибок.
Важно отметить, что выполнение что-либо с сеансом после исключения может привести к непредвиденному поведению, что является еще одной причиной ограничения явной обработки исключений внутри блока.