*round of applause for the sharp wit* Regards, J.
On Tuesday, April 17, 2012 12:55:30 PM UTC+1, Diego Mijelshon wrote: > > Perdón, debo haber estado hablando en español por error cuando expliqué > que tu código no tenía nada que ver con el ticket que mencionaste. > > Diego > > > On Tue, Apr 17, 2012 at 06:33, John T wrote: > >> You haven't given any reason why it would be hard or impossible to >> implement in NH. >> >> Thank you for your input none the less. >> >> Regards, >> J. >> >> On Monday, April 16, 2012 7:25:35 PM UTC+1, Diego Mijelshon wrote: >> >>> OK, is my last post on this thread. I won't waste more time, so feel >>> free to continue your bashing. >>> In Microsoft, all features start at minus 100 points, because they take >>> effort to implement, document, and test for compatibility. >>> So far, you have failed to prove that your feature goes beyond a minor >>> convenience issue, and to resolve the potential inconsistencies, much less >>> provide any actual pointers on how such a feature might be implemented. >>> I don't know what you are "trying to start here", but I given examples >>> and reasons why it would be hard (or impossible) to implement that in NH. >>> Regarding the model: You can have N-transactions and transaction scopes >>> per session; you just have to create the transactions inside the >>> scopes (remember transactionscopes are primarily wrappers for distributed >>> transactions). If your code uses different assumptions, that's fine, but >>> don't blame NH for that. >>> You are free to use any ORM you like (I do use EF in some projects, >>> having choices is wonderful). >>> >>> Diego >>> >>> >>> >>> On Mon, Apr 16, 2012 at 14:22, John T wrote: >>> >>>> And yet TransactionScope is still designed to be the one place that >>>> developers like you and I need to Complete a transaction. >>>> >>>> Else what is the point of using it? To create a n phase commit just for >>>> fun? What is the purpose of >>>> System.Transactions.Transaction.TransactionCompleted if not to do exactly >>>> this? >>>> >>>> As for your last somewhat irrelevant point: So what if there are only >>>> "five" people asking? So what if they aren't given patches, nor looked at >>>> the implementation in detail? What the hell do you think I'm trying to >>>> start here? I'm not demanding this be fixed for me, I'm starting a >>>> discussion on how can NH achieve this. In my very first post I have asked >>>> if anyone has hit any barriers in any previous attempts to do this before. >>>> So far, I've gathered that there is a very big barrier in the shape of a >>>> huge "holier than thou" attitude from certain devs that sit on their >>>> haunches and bleat the same tired arguments "you aren't going to need it" >>>> and "you're doing it wrong." >>>> >>>> The very idea behind TransactionScope is so that I, nor anyone else, do >>>> not need to make any more than ONE explicit commit/rollback call in my >>>> code. And here on this list I am being told (incorrectly) that that is not >>>> the case. I'm being told that I must create a session after a >>>> transactionscope. Whilst that was/is helpful advice (it does "work") it, >>>> as >>>> is explained by one of the comments in NH-2107 quite elegantly with >>>> diagrams, breaks the model of session vs transaction. Many >>>> transaction(scope)s per session. Not one-to-one >>>> session-to-transaction(scope). Or worse, many sessions to one >>>> transaction(scope). >>>> >>>> Regards, >>>> J. >>>> >>>> On Monday, April 16, 2012 6:04:58 PM UTC+1, Diego Mijelshon wrote: >>>> >>>>> There are a few problems: >>>>> - What you posted is absolutely different from the NH-2107. There, the >>>>> session is being opened inside the transactionscope, which is a point >>>>> where >>>>> an ambient transaction COULD be detected. >>>>> - I won't even try to compare this to the (discontinued) L2S, which >>>>> doesn't use POCOs. >>>>> - What is "the number of people asking for exactly the same thing"? >>>>> There are thousands of projects using NH, none of which has problems with >>>>> using NH transactions alone, or combined with TransactionScope. Five >>>>> users, >>>>> none of which seem to have looked at the implementation and implications >>>>> of >>>>> what they suggest, or provided a patch, are far from being a >>>>> significative >>>>> sample. >>>>> >>>>> Diego >>>>> >>>>> >>>>> >>>>> On Mon, Apr 16, 2012 at 13:12, John T wrote: >>>>> >>>>>> typo in previous: https://nhibernate.jira.com/browse/NH-2107 >>>>>> >>>>>> >>>>>> On Monday, April 16, 2012 5:02:27 PM UTC+1, Diego Mijelshon wrote: >>>>>> >>>>>>> Both of your examples are for inserts. >>>>>>> In neither case the instantiation location is important (you can try) >>>>>>> In neither case the object is a proxy, nor would it have to be even >>>>>>> if it was already persistent. >>>>>>> And in both cases, trying to update the object afterwards with just >>>>>>> a TransactionScope would not work. >>>>>>> >>>>>>> Just accept that it's not technically feasible for NH (or any other >>>>>>> framework) to do what you want, nor is it desirable for most people >>>>>>> using >>>>>>> it. Completing a scope and flushing a unit of work are different things. >>>>>>> >>>>>>> Diego >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Mon, Apr 16, 2012 at 12:34, John T wrote: >>>>>>> >>>>>>>> Please re-read my examples. >>>>>>>> >>>>>>>> The error in your example is that "foo" is instantiated outside of >>>>>>>> the TransactionScope. In both of my examples the equivalent query >>>>>>>> occurs >>>>>>>> INSIDE the TransactionScope. >>>>>>>> >>>>>>>> either way, given that "foo" will be an instance of an NHibernate >>>>>>>> proxy, Yes indeed: why couldn't NHibernate know it is in a >>>>>>>> TransactionScope >>>>>>>> ?! >>>>>>>> >>>>>>>> Regards, >>>>>>>> J. >>>>>>>> >>>>>>>> On Monday, April 16, 2012 3:00:50 PM UTC+1, Diego Mijelshon wrote: >>>>>>>> >>>>>>>>> Then, how would you handle this? >>>>>>>>> >>>>>>>>> var session = GetSession(); >>>>>>>>> var foo = session.Query<Foo>(...); >>>>>>>>> using (var transactionScope = new TransactionScope()) >>>>>>>>> { >>>>>>>>> foo.Bar = newValue; >>>>>>>>> transactionScope.Complete(); >>>>>>>>> } >>>>>>>>> >>>>>>>>> The update could never happen as there's no way for NH to catch >>>>>>>>> the change. >>>>>>>>> I't likely the same with other frameworks like EF; if you don't >>>>>>>>> call SaveChanges (which is the method that creates the transaction, >>>>>>>>> flushes >>>>>>>>> and commits), completing the scope will do nothing. >>>>>>>>> >>>>>>>>> Diego >>>>>>>>> >>>>>>>>> >>>>>>>>> On Mon, Apr 16, 2012 at 10:16, John T wrote: >>>>>>>>> >>>>>>>>> .. which is the crux of this problem/discussion. There should be, >>>>>>>>>> because it is used within a TransactionScope, and when the >>>>>>>>>> TransactionScope >>>>>>>>>> completes - so should NHibernate. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Monday, April 16, 2012 1:56:32 PM UTC+1, Diego Mijelshon wrote: >>>>>>>>>> >>>>>>>>>>> The former would probably persist if you flushed the session. >>>>>>>>>>> The problem is, there's absolutely nothing telling NH to save the >>>>>>>>>>> changes >>>>>>>>>>> to the DB. >>>>>>>>>>> >>>>>>>>>>> Diego >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Mon, Apr 16, 2012 at 07:20, John T wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi, The example code in my original post is a perfect example. >>>>>>>>>>>> The former doesn't persist, and the latter does. >>>>>>>>>>>> >>>>>>>>>>>> Regards, >>>>>>>>>>>> J. >>>>>>>>>>>> >>>>>>>>>>>> On Saturday, April 14, 2012 7:50:51 PM UTC+1, James Kovacs >>>>>>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> I'm confused by your assertion. I have used NHibernate in >>>>>>>>>>>>> production >>>>>>>>>>>>> applications using TransactionScope for transaction >>>>>>>>>>>>> management. >>>>>>>>>>>>> NHibernate properly enlisted in the ambient transaction. There >>>>>>>>>>>>> was no >>>>>>>>>>>>> need to call session.BeginTransaction()/tx.Commit() as well as >>>>>>>>>>>>> new >>>>>>>>>>>>> TransactionScope()/scope.Complete(). Just the latter was >>>>>>>>>>>>> sufficient >>>>>>>>>>>>> for proper transaction semantics. Are you using NHibernate >>>>>>>>>>>>> 3.2? Can >>>>>>>>>>>>> you provide a test case demonstrating the issue that you're >>>>>>>>>>>>> seeing? >>>>>>>>>>>>> >>>>>>>>>>>>> James >>>>>>>>>>>>> >>>>>>>>>>>>> On Apr 13, 4:56 am, John T wrote: >>>>>>>>>>>>> > Hi group, >>>>>>>>>>>>> > >>>>>>>>>>>>> > so I've discovered that NHibernate does not integrate at all >>>>>>>>>>>>> well with the >>>>>>>>>>>>> > Ambient Transaction. In fact, when using NHibernate within a >>>>>>>>>>>>> > TransactionScope, one would be forgiven for thinking it >>>>>>>>>>>>> doesn't integrate >>>>>>>>>>>>> > at all. >>>>>>>>>>>>> > >>>>>>>>>>>>> > What should be the correct usage: >>>>>>>>>>>>> > >>>>>>>>>>>>> > public void Foo() >>>>>>>>>>>>> > { >>>>>>>>>>>>> > ISession session = null; // get session from wherever >>>>>>>>>>>>> > >>>>>>>>>>>>> > using (var transactionScope = new TransactionScope()) >>>>>>>>>>>>> > { >>>>>>>>>>>>> > session.Save(new PersistableObject { ArbitraryProperty >>>>>>>>>>>>> = "a value" }); >>>>>>>>>>>>> > transactionScope.Complete(); >>>>>>>>>>>>> > } >>>>>>>>>>>>> > >>>>>>>>>>>>> > } >>>>>>>>>>>>> > >>>>>>>>>>>>> > is completely useless. What you actually have to do is: >>>>>>>>>>>>> > >>>>>>>>>>>>> > public void Foo() >>>>>>>>>>>>> > { >>>>>>>>>>>>> > ISession session = null; // get session from wherever >>>>>>>>>>>>> > >>>>>>>>>>>>> > using (var transactionScope = new TransactionScope()) >>>>>>>>>>>>> > using (var transaction = session.BeginTransaction()) >>>>>>>>>>>>> > { >>>>>>>>>>>>> > session.Save(new PersistableObject { ArbitraryProperty >>>>>>>>>>>>> = "a value" }); >>>>>>>>>>>>> > transaction.Commit(); >>>>>>>>>>>>> > transactionScope.Complete(); >>>>>>>>>>>>> > } >>>>>>>>>>>>> > >>>>>>>>>>>>> > } >>>>>>>>>>>>> > >>>>>>>>>>>>> > So the fact that NHibernate has any integration with the >>>>>>>>>>>>> Ambient >>>>>>>>>>>>> > Transaction seems completely pointless. >>>>>>>>>>>>> > >>>>>>>>>>>>> > Now, I've looked (only cursory thus far) through the NHib >>>>>>>>>>>>> src and have >>>>>>>>>>>>> > noted a few areas of interest wrt to integrating with the >>>>>>>>>>>>> Ambient >>>>>>>>>>>>> > Transaction. But I want to ask if anyone has tried this >>>>>>>>>>>>> already, and hit >>>>>>>>>>>>> > any barriers along the way? >>>>>>>>>>>>> > >>>>>>>>>>>>> > Regards, >>>>>>>>>>>>> > John. >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>> >>>>>>> >>>>> >>> >
