.. 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. >>> >> >