There appear to be some classes to work with DTC, but only for explicit transactions, not for implicit transactions, and no way to detect if TransactionScope has created an implied transaction.
My UnitOfWork implementation detects whether or not the application has created a transaction and if it has not then creates one (for database writes only - but should include queries as well...). John Davidson On Thu, May 6, 2010 at 12:21 PM, Matthijs ter Woord < [email protected]> wrote: > You'll need to make a resource manager then, so you can hook into > System.Transactions. (DTC) > > > > > On Thu, May 6, 2010 at 6:19 PM, John Davidson <[email protected]>wrote: > >> TransactionScope is meant to work with a System.Transactions.Transaction. >> NHibernate does not use this, but instead uses System.Data.IDBTransaction. >> It does not appear that there is any way to get the 2 kinds of Transaction >> to interoperate. >> >> Why does Microsoft create this kind of problem? >> >> John Davidson >> >> >> On Thu, May 6, 2010 at 11:09 AM, Carlos cubas <[email protected]>wrote: >> >>> Oh wow my feature request got some spot light :). >>> >>> If I get a chance today I'll open a Jira feature request for a >>> "Transaction Scope" section on the official reference documentation. >>> >>> >>> -Carlos >>> >>> Practice makes perfect, but if no one is perfect, why practice? >>> >>> >>> >>> >>> ------------------------------ >>> Date: Thu, 6 May 2010 11:36:28 -0300 >>> Subject: Re: [nhibernate-development] leaking connections when using >>> transactionscope without NH transaction >>> From: [email protected] >>> To: [email protected] >>> >>> >>> I feel a déjà vu... we discussed this same issue last month (but I think >>> it was on the users group). >>> There's even an open jira: http://216.121.112.228/browse/NH-2181 >>> >>> <http://216.121.112.228/browse/NH-2181>If you ask me... we do have a >>> violation of the principle of least surprise. >>> I can't count how many mails in the users group and questions in >>> Stackoverflow I've answered with "use a transaction". >>> >>> While I agree with Fabio in that an official reference on >>> TransactionScope is needed (in the main docs), this should be more intuitive >>> for new users. Maybe NH 3 is an opportunity to introduce breaking changes... >>> >>> Diego >>> >>> >>> On Thu, May 6, 2010 at 11:12, Davy Brion <[email protected]> wrote: >>> >>> Well for starters, it just feels pointless to use an NHibernate >>> Transaction if TransactionScope is supposed to take care of that for you. >>> And let's be honest here, that's just how it works with probably every >>> other data layer out there in the .NET world. Why should we be different? >>> >>> But if usage of an NH transaction is indeed absolutely required, then we >>> sure shouldn't put up with the current behavior either. It's way too easy >>> to make a mistake with it and just putting a notice in the official >>> reference about it feels like a cop-out instead of actually dealing with a >>> real problem. >>> >>> On Thu, May 6, 2010 at 4:03 PM, Fabio Maulo <[email protected]>wrote: >>> >>> IMO is the moment to write something in out official reference. >>> We should dedicate a section on : *How work with TransactionScope* >>> >>> I have never found a problem because I'm opening the NH'session and >>> begin, always, the NH's transaction inside the transaction scope. All >>> problem I have seen is about ppl who don't want use the NH's transaction... >>> with which reason ? so far I saw only "style" reason... for me the "style" >>> is a matter for FashionTV. >>> >>> On Thu, May 6, 2010 at 9:59 AM, John Davidson <[email protected]>wrote: >>> >>> It may seem to be a good idea to have a mandatory transaction within a >>> session, but you are forgetting that a session may use many transactions, >>> which makes it difficult to force a transaction creation within a sesssion. >>> I.E. when you commit a transaction and and the session is not yet closed do >>> you automatically create another transaction, just in case the session is >>> going to do more transactional work? >>> >>> I think many of the problems are a result of changes from v1.2 to 2.x >>> where it was recognized that a transaction was necessary for any read or >>> write activity with the database. However, there probably is a substantial >>> body of applications started in v1.2 that were upgraded to v2.x where the >>> upgrade to wrap all reads did not happen. >>> >>> I don't think this can easily be fixed by changing the session semantics. >>> >>> John Davidson >>> >>> >>> On Thu, May 6, 2010 at 8:42 AM, Davy Brion <[email protected]> wrote: >>> >>> yup, i feel the same way >>> >>> >>> On Thu, May 6, 2010 at 2:37 PM, Richard Brown >>> <[email protected]>wrote: >>> >>> IMHO, if the usage is not allowed, we should change the API to disallow >>> session without a tx. If it is allowed we should fix it. >>> >>> Sent from my Android phone. >>> >>> On 6 May 2010 13:19, "Davy Brion" <[email protected]> wrote: >>> >>> Hey guys, >>> >>> i just ran into a weird issue with leaking connections due to using a >>> TransactionScope without using an NH transaction... i've described the >>> problem here: >>> >>> http://davybrion.com/blog/2010/05/avoiding-leaking-connections-with-nhibernate-and-transactionscope/ >>> >>> the thing is: is this a bug in NH or not? I mean... it might be due to >>> bad usage, but if the usage scenario is bad, then NHibernate should probably >>> warn against it instead of playing along and failing silently in some >>> cases... >>> >>> thoughts? >>> >>> >>> >>> >>> >>> >>> >>> -- >>> Fabio Maulo >>> >>> >>> >>> >> >
