It sounds OK enough to me... remember that the most common usage (in production code, not unit tests) is doing commit/complete in your code and only having exceptions rollback.
Diego On Fri, Apr 16, 2010 at 01:13, Iain <[email protected]> wrote: > Here is my test code: > using (var session = _sessionFactory.OpenSession()) > { > using (var scope = new > TransactionScope(TransactionScopeOption.RequiresNew)) > { > using (var tx = _target.BeginTransaction()) > { > dog = GenerateDog(); > session.Save(dog); > session.Flush(); > } > scope.Dispose(); > } > } > I have found that if you use the ambient transaction and begin > transaction, you cannot use nHibernate Transaction Rollback. If you > do, you get an exception when you try and Complete or Dispose the > outer scope. Instead just let the nHibernate transaction dispose. > > And if you do not Commit the nHibernate transaction, you MUST dispose > the ambient transaction. If you call Complete you get an exception. > > Does this sound ok? > > On Apr 16, 9:47 am, Iain <[email protected]> wrote: > > Kudos to you Diego, that fixed it! > > > > On Apr 16, 1:05 am, Diego Mijelshon <[email protected]> wrote: > > > > > > > > > > > > > NHibernate transactions will enlist in ambient transactions. And you > **must** > > > use transactions for NH data access. > > > Try that and tell us if it works. > > > > > Diego > > > > > On Thu, Apr 15, 2010 at 11:55, Iain <[email protected]> wrote: > > > > I haven't really looked much into the session.BeginTransaction(). I > > > > need use nHibernate with MSMQ and WCF and my feeling is that > > > > session.BeginTransaction will not hock into the WCF transaction. Am I > > > > wrong? I can't find much on it. > > > > > > On Apr 15, 11:59 pm, Diego Mijelshon <[email protected]> wrote: > > > > > I'm not big on ambient transactions... but your I think there's a > problem > > > > > with your code. > > > > > IMO, it should look like this: > > > > > > > using (TransactionScope tx = > > > > > new TransactionScope(TransactionScopeOption.RequiresNew)) > > > > > using (ISession session = sessions.OpenSession()) > > > > > using (ITransaction nhtx = session.BeginTransaction()) > > > > > { > > > > > W s = new W(); > > > > > session.Save(s); > > > > > session.Flush(); > > > > > nhtx.Commit(); > > > > > } > > > > > > > Try it and see if there's any difference. > > > > > > > Diego > > > > > > > On Thu, Apr 15, 2010 at 01:48, Iain <[email protected]> > wrote: > > > > > > Hi All, > > > > > > > > I am having a connection leak when we using the ambient > transaction, > > > > > > and the transaction is aborted. That is, I get the exception: > > > > > > System.InvalidOperationException: Timeout expired. The timeout > period > > > > > > elapsed prior to obtaining a connection from the pool. This may > have > > > > > > occurred because all pooled connections were in use and max pool > size > > > > > > was reached. > > > > > > > > I am guessing something is holding onto a reference to the > connection, > > > > > > or an internal part of the connection. As adding a watch to > following > > > > > > and debug breaking within the transaction also causes this issue. > > > > > > ((System.Data.SqlClient.SqlInternalConnectionTds) > > > > > > ((System.Data.SqlClient.SqlConnection) > > > > > > (session.Connection))._innerConnection)._connectionPool.Count > > > > > > > > Is this a known issue or unsupported? Currently our workaround is > to > > > > > > promote the transaction to a distributed transaction which seems > to > > > > > > work ok, as per this article: > > > > > > > http://davybrion.com/blog/2010/03/msdtc-woes-with-nservicebus-and-nhi. > > > > .. > > > > > > > > Here is the unit test that re-produces the issue: > > > > > > > > [Test] > > > > > > public void CanUseSystemTransactionsToAbort() > > > > > > { > > > > > > for (var i = 0; i < 200; i++) > > > > > > { > > > > > > using (ISession session = sessions.OpenSession()) > > > > > > using (TransactionScope tx = new > > > > > > TransactionScope(TransactionScopeOption.RequiresNew)) > > > > > > { > > > > > > W s = new W(); > > > > > > session.Save(s); > > > > > > session.Flush(); > > > > > > } > > > > > > } > > > > > > } > > > > > > > > Cheers, > > > > > > > > Iain > > > > > > > > -- > > > > > > 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%[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. > > > > > > -- > > > > 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%[email protected]> > > > > > > . > > > > For more options, visit this group at > > > >http://groups.google.com/group/nhusers?hl=en.-Hide quoted text - > > > > > - Show quoted text - > > > > -- > > 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 athttp:// > groups.google.com/group/nhusers?hl=en.- Hide quoted text - > > > > - Show quoted text - > > -- > 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. > > -- 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.
