Я проверил источники NHibernate 3.1.0
, и кажется, что вызов ISession.Close()
должен привести к ITransaction.Dispose()
для реализации по умолчанию. Но, тем не менее, использование этого в существующем приложении не привело к явной транзакции commit
или rollback
- проверено с помощью NHibernate Profiler
.
Я не думаю, что было бы хорошей идеей оставлять транзакцию, полагаясь только на ISession.Close()
, поскольку это может привести к непредсказуемому поведению. Что если кто-то адаптирует этот конкретный метод и включит ISession.SaveOrUpdate
... ваши сущности не будут сохраняться.
UPDATE
С точки зрения Sql Server
я думаю, что это зависит от вашей транзакции isolation level
, но я уверен, что рано или поздно вы столкнетесь с блокировками или таймаутами. Пожалуйста, обратитесь к этому sql-server
конкретный вопрос:
Что происходит с незафиксированной транзакцией при закрытии соединения?