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.
