Что будет, если я не вызову транзакции. - PullRequest
0 голосов
/ 06 июля 2011

В начале единицы работы я вызываю сессию. Начало транзакции Я заметил, что даже если не было внесено никаких изменений в базу данных во время транзакции, коммит все еще дорог.

Что произойдет, если в случае отсутствия изменений я просто вызову session.close и не буду вызывать транзакции с помощью exchange.commit? Транзакция все еще располагает?

1 Ответ

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

Я проверил источники NHibernate 3.1.0, и кажется, что вызов ISession.Close() должен привести к ITransaction.Dispose() для реализации по умолчанию. Но, тем не менее, использование этого в существующем приложении не привело к явной транзакции commit или rollback - проверено с помощью NHibernate Profiler.

Я не думаю, что было бы хорошей идеей оставлять транзакцию, полагаясь только на ISession.Close(), поскольку это может привести к непредсказуемому поведению. Что если кто-то адаптирует этот конкретный метод и включит ISession.SaveOrUpdate ... ваши сущности не будут сохраняться.

UPDATE

С точки зрения Sql Server я думаю, что это зависит от вашей транзакции isolation level, но я уверен, что рано или поздно вы столкнетесь с блокировками или таймаутами. Пожалуйста, обратитесь к этому sql-server конкретный вопрос:

Что происходит с незафиксированной транзакцией при закрытии соединения?

...