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

Reply via email to