beginTransaction when it starts a transaction,
on the other hand
session.Transaction will return the currently active transaction if null creates it.
The NHibernate session monitors the currently active (not fixed or rollback).
If you call ISession.Transaction when the transaction has not yet been created during the life of the session, the session will create a new transaction object at this point in time, but you will not start it yet. When you call ISession.BeginTransaction , the session will see if they are already a transaction object that was created earlier but not yet completed. If so, it will return this transaction object. If not, it will create a new transaction object, start it and save a link to this new object.
When the transaction ends, the transaction object notifies the session to which it belongs, it is completed, at which the session will release its link to the transaction object. Any subsequent call to ISession.Transaction or ISession.BeginTransaction will then cause the creation of a new transaction object.
NHibernate does not support reusing transaction objects for more than one transaction (this behavior may differ from Hibernate, which seems to support reusing transaction objects).
Refer this document.
source share