Gerke,

Thank you so much. That explained the different behavior that I was seeing.
That is actually kinda nice since ISession.Transaction will always give the
the active session at the time.

Thanks once again,

Hoang

On Thu, Mar 24, 2011 at 3:03 AM, ggeurts <[email protected]> wrote:

> Hi Hoang,
>
> The NHibernate session tracks the current active (not committed or
> rolled back) transaction.
>
> If you call ISession.Transaction when no transaction has yet been
> created yet during the life time of the session, the session will
> create a new transaction object at that point in time, but won't begin
> it yet. When you call ISession.BeginTransaction, the session will see
> if their is already a transaction object that has been created before,
> but not yet completed. If so, it will return this transaction object.
> If not, it will create a new transaction object, begin it and store a
> reference to this new object.
>
> On transaction completion, the transaction object notifies the session
> to which it belongs that it has completed, on which the session will
> release its reference to the transaction object. Any following call to
> ISession.Transaction or ISession.BeginTransaction will then cause the
> creation of a new transaction object.
>
> NHibernate does not support reuse of transaction objects for more than
> one transaction (this behaviour may be different from Hibernate, which
> does seem to support reuse of transaction objects).
>
> Regards,
> Gerke.
>
>
> On 23 mrt, 07:59, Hoang Tang <[email protected]> wrote:
> > Recently I started to dig into how to improve the handling of transaction
> > handling in my code
> >
> > I notice that there are two way to start a transaction...
> >
> >  ITransaction beginTransaction = Session.BeginTransaction();
> > Or I can do  Session.Transaction.Begin();
> >
> > The interesting is that
> >
> > [Test]
> >         public void NHibernateTransact1()
> >         {
> >             ITransaction beginTransaction = Session.BeginTransaction();
> >             ITransaction beginTransaction1 = Session.BeginTransaction();
> >             Assert.Equal(beginTransaction, beginTransaction1); // so if I
> > call begin transactiontwice.. it return the same transaction
> >
> >             Assert.Equal(beginTransaction, Session.Transaction); // it
> also
> > return the same thing as Session.Transaction
> >       }
> >
> > but if I do something like
> >
> > [Test]
> >         public void NHibernateTransact2()
> >         {
> >             ITransaction beginTransaction = Session.BeginTransaction();
> >             ITransaction beginTransaction1 = Session.BeginTransaction();
> >             Assert.Equal(beginTransaction, beginTransaction1);
> >
> >             Assert.Equal(beginTransaction, Session.Transaction);
> >             beginTransaction.Rollback();
> >
> >             Assert.NotEqual(beginTransaction, Session.Transaction);
> //<---
> > after the rollback they are not the same anymore?
> >
> > }
> >
> > for both test the Session is a brand new session from
> > SessionFactory.OpenSession();
> >
> > So I am curious of what is the different between the two... and when
> should
> > I use one vs the other?
> >
> > Any help on this would be greatly appreciated
> >
> > Thanks,
> >
> > Hoang
>
> --
> You received this message because you are subscribed to the Google Groups
> "nhusers" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/nhusers?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to