public void CanDoItManually() { string id = null; using (var connection = new SqlConnection(ConnectionString)) { connection.Open(); connection.BeginTransaction(); using (var c = connection.CreateCommand()) { connection.AssignTransactionIfNecessary(c); c.CommandText = "delete from messages"; c.ExecuteNonQuery(); } connection.GetTransactionOrNull() .Commit(); } using (new TransactionScope()) { var tx2 = new TransactionScope(TransactionScopeOption.Suppress); using (var connection = new SqlConnection(ConnectionString)) { connection.Open(); connection.BeginTransaction(); tx2.Dispose(); using (var c = connection.CreateCommand()) { connection.AssignTransactionIfNecessary(c); c.CommandText = "insert into messages (id, data) values (@id, @data)"; c.Parameters.AddWithValue("id", "1"); c.Parameters.AddWithValue("data", "hej1"); c.ExecuteNonQuery(); } connection.GetTransactionOrNull() .Commit(); } using (var connection = new SqlConnection(ConnectionString)) { connection.Open(); connection.BeginTransaction(); using (var c = connection.CreateCommand()) { connection.AssignTransactionIfNecessary(c); c.CommandText = "select top 1 id, data from messages with (updlock, readpast)"; using (var reader = c.ExecuteReader()) { if (reader.Read()) { id = (string)reader["id"]; } } } using (var c = connection.CreateCommand()) { connection.AssignTransactionIfNecessary(c); c.CommandText = "insert into messages (id, data) values (@id, @data)"; c.Parameters.AddWithValue("id", "2"); c.Parameters.AddWithValue("data", "hej2"); c.ExecuteNonQuery(); } using (var c = connection.CreateCommand()) { connection.AssignTransactionIfNecessary(c); c.CommandText = "delete from messages where id = @id"; c.Parameters.AddWithValue("id", id); c.ExecuteNonQuery(); } using (var c = connection.CreateCommand()) { connection.AssignTransactionIfNecessary(c); c.CommandText = "insert into messages (id, data) values (@id, @data)"; c.Parameters.AddWithValue("id", "3"); c.Parameters.AddWithValue("data", "hej3"); c.ExecuteNonQuery(); } connection.GetTransactionOrNull() .Rollback(); } } }