Session.BeginTransaction() и transaction.Commit()

Я новичок в Nhibernate, поэтому мой запрос может показаться вам тривиальным.

Обычно мы вставляем код операции с данными внутри

  using (var session = sessionFactory.OpenSession())
  {
    using (var transaction = session.BeginTransaction())
    {
       ...Code for CRUD operations
       transaction.Commit();
    }
  }

Поскольку мы обычно выполняем BeginTransaction/Commit/Rollback для сохранения/обновления/удаления данных,

Интересно, нужны ли BeginTransaction() и Commit(), даже если я возвращаю данные, используя session.Get<T>(id); или session.CreateCriteria<T>().List();

Пожалуйста, направляйте.

Спасибо!

Ответ 1

Нет, вы не можете выполнять поиск данных без транзакции; все операции NH ориентированы на транзакцию.

Прочтите эту статью Айенде Рахиен.

Ответ 2

Вы всегда должны использовать транзакции в запросах. Не только для производительности, но и для причин concurrency, и Ayende говорит об этом.

Профилировщик Hibernate показывает и предупреждает, если вы используете запросы не в области транзакций.