SubSonic2.2 SharedDbConnectionScope and TransactionScope Transaction Confusion
ARGH!!!

There seems to be a little confusion surrounding the SharedDbConnectionScope and TransactionScope objects to enable wrapping your SubSonic queries within a transaction.

The docs suggest specifying the using SharedDbConnectionScope wrapped around the using  TransactionScope...

    using(SharedDbConnectionScope scope = new SharedDbConnectionScope())
    {
      using(TransactionScope ts = new TransactionScope())
      {
        // do something
        ts.Complete();
      }
    }

Then other question here such as [Subsonic: Using SharedDbConnectionScope together with TransactionScope seems to be broken][1] suggest the docs are wrong and the two objects should be the other way around...

    using(TransactionScope ts = new TransactionScope())
    {
      using(SharedDbConnectionScope scope = new SharedDbConnectionScope())
      {
        // do something
        ts.Complete();
      }
    }


But looking into the source code I am even more confused.

In the SqlQuery.cs code file it has a number of ExecuteTransaction overloads.  For example... 

    public static void ExecuteTransaction(List<SqlQuery> queries)
    {
      using(SharedDbConnectionScope scope = new SharedDbConnectionScope())
      {
        using(TransactionScope ts = new TransactionScope())
        {
          foreach(SqlQuery q in queries)
            q.Execute();
        }
      }
    }

Umm... Interesting... Matches the docs but... **Where's the ts.Complete() call?**

How is that supposed to commit the transaction?  As far as I can see it will always rollback.  And it is the same for all the ExecuteTransaction overloads!


But here is the real kicker...

In the TransactionWithDtcOffTests.cs code has some nice tests except they have set up the SharedDbConnectionScope and TransactionScope around the other way!

    using(TransactionScope ts = new TransactionScope())
    {
      using(SharedDbConnectionScope connScope = new SharedDbConnectionScope())
      {
        // <snip />
      }
    }

I haven't had the opportunity to run the tests for SubSonic 2.2 but I assume someone has and they passed..


**Finally...**

Can someone give me the definitive answer to how Transactions in SubSonic2.2 should be set up?  Are the docs indeed wrong?  Does the source for the ExecuteTransaction overloads and tests be aligned to whichever way is actually correct?


  [1]: http://stackoverflow.com/questions/1242988/subsonic-using-shareddbconnectionscope-together-with-transactionscope-seems-to-b
SubSonic2.2 SharedDbConnectionScope and TransactionScope Transaction Confusion
===

ARGH!!!

There seems to be a little confusion surrounding the SharedDbConnectionScope and TransactionScope objects to enable wrapping your SubSonic queries within a transaction.

The docs suggest specifying the using SharedDbConnectionScope wrapped around the using  TransactionScope...

    using(SharedDbConnectionScope scope = new SharedDbConnectionScope())
    {
      using(TransactionScope ts = new TransactionScope())
      {
        // do something
        ts.Complete();
      }
    }

Then other question here such as [Subsonic: Using SharedDbConnectionScope together with TransactionScope seems to be broken][1] suggest the docs are wrong and the two objects should be the other way around...

    using(TransactionScope ts = new TransactionScope())
    {
      using(SharedDbConnectionScope scope = new SharedDbConnectionScope())
      {
        // do something
        ts.Complete();
      }
    }


But looking into the source code I am even more confused.

In the SqlQuery.cs code file it has a number of ExecuteTransaction overloads.  For example... 

    public static void ExecuteTransaction(List<SqlQuery> queries)
    {
      using(SharedDbConnectionScope scope = new SharedDbConnectionScope())
      {
        using(TransactionScope ts = new TransactionScope())
        {
          foreach(SqlQuery q in queries)
            q.Execute();
        }
      }
    }

Umm... Interesting... Matches the docs but... **Where's the ts.Complete() call?**

How is that supposed to commit the transaction?  As far as I can see it will always rollback.  And it is the same for all the ExecuteTransaction overloads!


But here is the real kicker...

In the TransactionWithDtcOffTests.cs code has some nice tests except they have set up the SharedDbConnectionScope and TransactionScope around the other way!

    using(TransactionScope ts = new TransactionScope())
    {
      using(SharedDbConnectionScope connScope = new SharedDbConnectionScope())
      {
        // <snip />
      }
    }

I haven't had the opportunity to run the tests for SubSonic 2.2 but I assume someone has and they passed..


**Finally...**

Can someone give me the definitive answer to how Transactions in SubSonic2.2 should be set up?  Are the docs indeed wrong?  Does the source for the ExecuteTransaction overloads and tests be aligned to whichever way is actually correct?


  [1]: http://stackoverflow.com/questions/1242988/subsonic-using-shareddbconnectionscope-together-with-transactionscope-seems-to-b