Как транзакции работают в nhibernate? - PullRequest
7 голосов
/ 05 июня 2011

Я только начал изучать nHibernate, и меня смущают транзакции.Я знаю, что nhibernate отслеживает все изменения в постоянных объектах в сеансе, и эти изменения отправляются в базу данных при фиксации, но какова цель транзакций?

Если я обертываю код в блоке «используя транзакцию» иВызов коммита - это просто фиксация изменений объекта, произошедших в транзакции, или фиксация всех изменений, произошедших в сеансе с момента последней фиксации сброса?

Ответы [ 2 ]

2 голосов
/ 05 июня 2011

Цель транзакций - убедиться, что вы не зафиксировали сеанс с грязными данными или ошибками.Рассмотрим очень простой случай транзакции размещения заказа на книгу.

Вы, вероятно, выполните следующие действия: a) Проверьте, существует ли книга в данный момент.б) Прочтите данные клиента и посмотрите, есть ли у него что-нибудь в корзине.c) Обновите счетчик книг. d) Сделайте запись для заказа

. Теперь рассмотрим случай, когда вы сталкиваетесь с ошибкой при вводе заказа, если вы хотите, чтобы другие изменения были отменены, и этокогда вы откатываете транзакцию.

Как вы это делаете?Ну, есть много способов.Одним из способов для веб-приложений является отслеживание объекта HTTP Error следующим образом:

if(HttpContext.Current != null && HttpContext.Current.Error != null)
transaction.Rollback();

В идеале не следует нарушать шаблон единиц работы, используя явные блоки транзакций.Старайтесь избегать этого как можно больше

0 голосов
/ 06 июня 2011

Если вы не используете транзакции, то в любое время NHibernate отправляет пакет, и только эта транзакция будет транзакцией.Я не уверен, использует ли session.Flush () пакет или нет.Давайте предположим, что это так.Ваш первый вызов session.Flush () приведет к транзакции.Предположим, ваш второй вызов сброса приводит к ошибке.Изменения с первого сброса останутся в БД.

Если, с другой стороны, вы используете явную транзакцию, вы можете вызывать сброс до миллиона раз, но если вы откатите транзакцию (возможно, потому что миллионнаяи один флеш сгенерировал ошибки) затем все флеши откатились.

Надеюсь, что это имеет смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...