session.BeginTransaction () и транзакция.Commit () - PullRequest
10 голосов
/ 27 октября 2009

Я новичок в 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();

Пожалуйста, руководство.

Спасибо!

Ответы [ 2 ]

5 голосов
/ 27 октября 2009

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

Прочитайте эту статью Ayende Rahien .

3 голосов
/ 27 октября 2009

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

Его профилировщик Hibernate показывает и предупреждает, если вы используете запросы, не входящие в объем транзакции.

...