Yes, this works, but that is not a good programming model.It means that we have to manually manage things that TransactionScope should handle. More than that, I _really_ don't like calling flush explicitly.
For now, I am going to commit the fix using EnglistRegisterDuringPrepare. On Mon, Mar 23, 2009 at 7:34 PM, Fabio Maulo <[email protected]> wrote: > I don't understand using (var tx = new TransactionScope()) > using (var s = sessions.OpenSession()) > using(s.BeginTransaction()) > { > > s.Delete(s.Get<Person>(id)); > > s.Flush(); > s.Transaction.Commit(); > > tx.Complete(); > } > This is working ? > > 2009/3/23 Ayende Rahien <[email protected]> > >> yes >> >> >> On Mon, Mar 23, 2009 at 3:12 PM, Michael Teper >> <[email protected]>wrote: >> >>> Ayende, I am not sure what you meant by this comment, but from your >>> other replies, it sound like you agree with me that it would be better if >>> explicit session.BeginTransaction was not requried, correct? >>> >>> Thanks! >>> -Michael >>> >>> ------------------------------ >>> *From:* [email protected] [ >>> [email protected]] On Behalf Of Ayende Rahien [ >>> [email protected]] >>> *Sent:* Monday, March 23, 2009 11:48 AM >>> >>> *To:* [email protected] >>> *Subject:* [nhibernate-development] Re: More DTC issues >>> >>> We don't really care for that, we let the DTC infrastructure take care >>> of this. >>> >>> On Mon, Mar 23, 2009 at 12:57 PM, Michael Teper < >>> [email protected]> wrote: >>> >>>> Fabio, Ayende, >>>> >>>> Another thing to consider is the nested transaction scenario like this: >>>> >>>> using (var scopeOuter = new TransactionScope()) >>>> { >>>> // load / change some object(s) >>>> >>>> using (var innerScope = new TransactionScope()) >>>> { >>>> try >>>> { >>>> // load / change something else >>>> innerScope.complete(); >>>> } >>>> catch { // do something } >>>> } >>>> >>>> outerScope.complete(); >>>> } >>>> >>>> This may look silly but if the inner transaction is encapsulated in a >>>> different class, this is a very plausible scenario. Wherever NH keeps track >>>> of the current transaction scope, it needs to be aware of potential for >>>> nesting. >>>> >>>> Thanks! >>>> -Michael >>>> >>>> >>>> ------------------------------ >>>> *From:* [email protected] [ >>>> [email protected]] On Behalf Of Fabio Maulo [ >>>> [email protected]] >>>> *Sent:* Monday, March 23, 2009 9:45 AM >>>> *To:* [email protected] >>>> *Subject:* [nhibernate-development] Re: More DTC issues >>>> >>>> >>>> >>>> 2009/3/23 Ayende Rahien <[email protected]> >>>> >>>>> The problem is that usually the DTC is opened by a lower level >>>>> component, and my code has no control over it. More than that, I >>>>> usually don't have control over NH's code as well. >>>>> >>>>> It goes like this: >>>>> >>>>> 1/ low level infrastructure - dtc >>>>> 2/ high level infarstruture - nh >>>>> 3/ business code - my stuff >>>>> >>>> >>>> and then >>>> 3 -end >>>> 2- end >>>> 1-end >>>> >>>> If 2 don't know about 1, 2 should use session.BeginTransaction and >>>> session.Transaction.Commit(). >>>> >>>> >>>>> >>>>> I don't want to be aware of all of this issues, I just want to make >>>>> this work. >>>>> So explicitly flushing is an option that I would generally be against. >>>>> >>>>> Making NH's transaction equal to the dtc is also not a good option, >>>>> because the use of the DTC is to manage several resources, not just NH. >>>>> >>>> >>>> You know... I never said dtc=nhTx >>>> What I would like to avoid is If(DTC) {something} else {somethingelse} >>>> inside NH-Core. >>>> >>>> -- >>>> Fabio Maulo >>>> >>> >>> >> > > > -- > Fabio Maulo >
