Let me clarify few things regarding the NHibernate facility in Castle
Even when you are using the session in this manner:
Code:
using(ISession session = SessionManager.OpenSession())
{
// This session is going to have a transaction associated
Blog blog = new Blog();
blog.Name = name;
session.Save(blog);
return blog;
}
the session will not be disposed if there is a CurrentTransaction in progress (see the Dispose implementation in SessionDelegate class).
Now the second point:
After a call to OpenSession on SessionManager any further call to OpenSession would return the same session. for e.g. if in MyDAO you get a session and call a method on MySecondDAO, the call to OpenSession in MySecondDAO will return the same Session.
Now regarding auto transaction:
As I said the transaction is not living across Sessions as the session is not disposed even when the Using block completes if there is a current transaction.
Whenever a transactional method calls another transactional method they share the same CurrentTransaction (this is achieved by the PerThread lifestyle of the NHibernateTransactionManager class) and the transaction gets committed or rolledback only when the root method finishes however the child transactios can vote for rollback.
Hope this helps....