Порядок ваших операторов использования правильный (я помню порядок сам с этим трюком: Соединение должно знать о транзакции во время ее создания, и это проверяется с помощью `System.Transactions.Transaction.Current).
Один совет: вам не нужно использовать двойные скобки.И вам не нужна ссылка на SharedDbConnectionScope ().Это выглядит гораздо более читабельным.
using (var ts = new TransactionScope())
using (new SharedDbConnectionScope())
{
// some db stuff
ts.Complete();
}
Во всяком случае, я не понимаю, почему это не должно работать.Если проблема будет связана с MSDTC, возникнет исключение.
Я могу только предположить, что есть проблема в конфигурации SqlServer 2005, но я не эксперт по SqlServer.
Возможно, вам следует попробовать демо-код, чтобы убедиться, что транзакции работают:
using (var conn = new SqlConnection("your connection String");
{
conn.Open();
var tx = conn.BeginTransaction();
using (var cmd = new SqlCommand(conn)
cmd.ExecuteScalar("DELETE FROM table WHERE id = 1");
using (var cmd2 = new SqlCommand(conn)
cmd2.ExecuteScalar("DELETE FROM table WHERE id = 2");
tx.Commit();
}
И Subsonic поддерживает собственные транзакции без использования TransactionScope: http://subsonicproject.com/docs/BatchQuery