Make sure that your session is created AFTER the transactionscope.

On Fri, Apr 13, 2012 at 12:56 PM, John T <[email protected]> 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.
>
>


-- 
Ramon

Reply via email to