Below the output from NHProf: -- statement #1 enlisted session in distributed transaction with isolation level: Serializable
-- statement #2 begin transaction with isolation level: Unspecified -- statement #3 SELECT ....... -- statement #4 UPDATE ...... -- statement #5 commit transaction -- statement #6 rollback transaction -- statement #7 begin transaction with isolation level: Unspecified -- statement #8 commit transaction No select between statment #7 and #8. @Jason: what if I opened a session before TS? Will disconnecting en reconnecting the session register it with the TS? On 15 jan, 14:50, Fabio Maulo <[email protected]> wrote: > Did you see SQL ? > Did you see a SELECT in the second session.Get ? > > 2010/1/15 HH <[email protected]> > > > > > > > Hi Fabio, > > > I am still a bit confused. Now I am using the following test code: > > > [TestMethod] > > public void CanRollbackTransaction() { > > long medewerkerId = 2; > > string voornaam; > > > using (var session = NHibernateSession.Current) // session will be > > opened > > using (NHibernate.ITransaction trans = session.BeginTransaction()) { > > > using (var ts = new TransactionScope()) { > > > Medewerker m = > > session.Get<Medewerker>(medewerkerId); > > voornaam = m.Voornaam; > > m.Voornaam = DateTime.Now.ToString(); > > > session.Update(m); > > > //NB: scope is not completed > > } > > > trans.Commit(); // This throws > > NHibernate.TransactionException: > > Transaction not connected, or was disconnected. > > } > > > using (var session = NHibernateSession.Current) { > > Medewerker mCheck = session.Get<Medewerker>(medewerkerId); > > Assert.AreEqual(voornaam, mCheck.Voornaam); > > } > > } > > > The above code does not succeed when commiting the NHibernate > > Transaction I receive the following (obvious) error: > > NHibernate.TransactionException: Transaction not connected, or was > > disconnected. > > > Next test looked like this: > > > [TestMethod] > > public void CanRollbackTransaction() { > > long medewerkerId = 2; > > string voornaam; > > string voornaamCheck; > > > using (var session = NHibernateSession.Current) { > > using (var ts = new TransactionScope()) { > > using (NHibernate.ITransaction trans = > > session.BeginTransaction()) > > { > > > Medewerker m = > > session.Get<Medewerker>(medewerkerId); > > voornaam = m.Voornaam; > > m.Voornaam = DateTime.Now.ToString(); > > > session.Update(m); > > > trans.Commit(); > > } > > > //NB: scope is not completed > > } > > > using (NHibernate.ITransaction trans = > > session.BeginTransaction()) { > > Medewerker mCheck = > > session.Get<Medewerker>(medewerkerId); > > voornaamCheck = mCheck.Voornaam; > > > trans.Commit(); > > } > > Assert.AreEqual(voornaam, voornaamCheck); > > } > > } > > > So NHTransaction nested in TS and check on equalness in same session > > (not same transaction). Again no succes. The Session.Get gives me the > > "wrong" value. > > > My main issue is that the NHibernate action are only part of the > > solution, so when writing a "Transaction" ActionFilterAttribute for > > the controllers of my MVC classes I want to make sure that all actions > > in the controller succeed or do not succeed. So I must use TS as the > > main transaction handler and I want NHibernate transactions to be part > > of the "main transaction" that is the TS transaction. > > > Any suggestions? > > > Henk > > > On 15 jan, 00:35, Fabio Maulo <[email protected]> wrote: > > > you can commit the NH's transaction and leave the real action to TS > > > (Abort/Complete). > > > Why ?... > > > Well... you should manage the NH's always and occasionally the NH's will > > > work in an Ambient-Transaction. > > > The code where the NH's transaction is managed shouldn't not be aware > > about > > > if it is working in Ambient-Transaction or not. > > > For those using AOP this is pretty normal. > > > > btw, have you tried using the NH's transaction in your tests ? > > > > 2010/1/14 HH <[email protected]> > > > > > So you are suggesting that I should use the following: > > > > > OnActionExecuting: > > > > 1) Open Session (if not open) > > > > 2) CreateTransactionScope > > > > 3) Start NHibernate Transaction > > > > > OnActionExecuted: > > > > if ([errorsOccured]) > > > > Rollback NHibernate transaction > > > > else > > > > Commit NHiberate transaction > > > > TransactionScope.Complete() > > > > > Session will be closed on end request. > > > > > This makes me have to manage both the TransactionScope and NHibernate > > > > transaction. > > > > > Why? > > > > > Henk > > > > > On 14 jan, 22:49, Fabio Maulo <[email protected]> wrote: > > > > > 2010/1/14 HH <[email protected]> > > > > > > > Do you have any ideas on how to make this work? > > > > > > with an appropriate ActionFilter to manage NH's session, TS and NH's > > > > > transaction > > > > > > Fabio Maulo > > > > > -- > > > > 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]<nhusers%[email protected]> > > <nhusers%[email protected]<nhusers%252bunsubscr...@googlegroups.com> > > > > > > > . > > > > For more options, visit this group at > > > >http://groups.google.com/group/nhusers?hl=en. > > > > -- > > > Fabio Maulo- Tekst uit oorspronkelijk bericht niet weergeven - > > > > - Tekst uit oorspronkelijk bericht weergeven - > > > -- > > 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]<nhusers%[email protected]> > > . > > For more options, visit this group at > >http://groups.google.com/group/nhusers?hl=en. > > -- > Fabio Maulo- Tekst uit oorspronkelijk bericht niet weergeven - > > - Tekst uit oorspronkelijk bericht weergeven -
-- 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.
