Ah, your problem is that you are using a different connection for your
2nd statement. You need to share the transaction on both of those
operations. Here is what I do to mix NHibernate and ADO, no guarantees
but works for me.

        /// <summary>
        /// Use a workaround to retrieve actual transaction in use so
we can send direct ADO commands
        /// in same transaction as nhibernate repositories. WARNING:
Current implementation of SqlDataAccess
        /// helper methods does not reuse connection for parameter
discovery so if you are using SQL auth
        /// (which you probably should be for NHibernate) then
directly specify SqlParameters to get around this
        /// </summary>
        /// <returns></returns>
        public System.Data.SqlClient.SqlTransaction GetSqlTransaction
()
        {
            //use workaround to get the transaction for this
nhibernate repository so we can submit direct ADO commands on same
transaction
            //http://www.lostechies.com/blogs/joshua_lockwood/archive/
2007/04/10/how-to-enlist-ado-commands-into-an-nhibernate-
transaction.aspx
            if (_SqlTransaction == null)
            {
                using (var cmd = new System.Data.SqlClient.SqlCommand
())
                {
                    cmd.Connection =
(System.Data.SqlClient.SqlConnection)Session.Connection;
                    Transaction.Enlist(cmd);
                    _SqlTransaction = cmd.Transaction;
                }
            }

            return _SqlTransaction;
        }
        System.Data.SqlClient.SqlTransaction _SqlTransaction = null;


On Oct 19, 9:43 pm, Fabio Maulo <[email protected]> wrote:
> Personally I don't know what you are talking about.You can have x
> transactions inside the same nh-session.
> session-per-request is a pattern well documented and with thousands of
> examples.
>
> In your code the first transaction is rolled-back because the transaction is
> disposed without commit that mean rollback it.
>
> When you don't know how manage transactions the most easy way to solve the
> problem is saying:
> "Clearly NHibernate breaks when using nested transactions though, so I'm
> kind of stuck."
>
> 2009/10/19 acl123 <[email protected]>
>
>
>
>
>
>
>
> > By the way I am using Session-Per-Web-Request as this appears to be
> > the recommend way to use NHibernate with Asp .NET.
>
> > This means that I definitely don't want to be wrapping the entire
> > session in a transaction (the method that Ayende uses on his blog). I
> > want to be using TransactionScope
> > like you would use an NHibernate transaction - i.e. multiple
> > transaction per session.
>
> > Clearly NHibernate breaks when using nested transactions though, so
> > I'm kind of stuck.
>
> > On Oct 19, 12:59 pm, acl123 <[email protected]> wrote:
> > > In this case, the second ADO command is committed to the database,
> > > whilst the first is rolled back. What is going on? This seems very
> > > weird to me.
>
> > > This is kind of a follow up question to my previous post here:
> >http://groups.google.com/group/nhusers/browse_thread/thread/241cc0430...
>
> > >     [TestFixture]
> > >     public class TestFixture
> > >     {
> > >             [Test]
> > >             public void Test()
> > >             {
> > >                 using(var factory = _config.BuildSessionFactory())
> > >                 {
> > >                     using (var session = factory.OpenSession())
> > >                     {
> > >                         CallSessionContext.Bind(session);
>
> > >                         using(new TransactionScope())
> > >                         {
> > >                             using (session.BeginTransaction())
> > >                             {
> > >                                  // Do something with an NHibernate
> > > mapped entity
> > >                             }
>
> > >                             using(var connection = new SqlConnection
> > > (_connectionString))
> > >                             {
> > >                                  // Execute an insert statement
> > >                             }
> > >                         }
>
> > >                         CallSessionContext.Unbind(factory);
> > >                     }
> > >                 }
> > >             }
> > >     }
>
> --
> Fabio Maulo- Hide quoted text -
>
> - Show quoted text -
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to