I'm using a nice little [Rollback] attribute on my NUnit database-level tests:
public class RollbackAttribute : Attribute, ITestAction 
{
   private TransactionScope _transaction;
   public ActionTargets Targets {
      get { return ActionTargets.Test; }
   }
   public void BeforeTest(TestDetails testDetails) {
      _transaction = new TransactionScope();
   }
   public void AfterTest(TestDetails testDetails) {
      _transaction.Dispose();
   }
}
So I can then decorate my db-based tests like this:
[Test]
[Rollback]
public void TestGetAllActiveItems()
{
    // Arrange
    SetupTestData();
    // Act
    var results = GetAllActiveItems(string.Empty, string.Empty);
    // Assert
    Assert.IsNotNull(results);
}
The sample data I create and store in the SetupTestData() method is used for the test, and then discarded at the end of the test.
This works like a charm on SQL Server 2012 and 2014 on my local dev machine - but for some reason, it appears to fail miserably on our build & test machine, which is still using SQL Server 2005 (soon to be upgraded).
Any ideas why? I just see that my two items that I insert into the database in my SetupTestData() method are inserted once for each test method, and NOT rolled back at the end of each method, for some weird reason.... I don't see any errors or other indicators in the build / testrun logs - it just doesn't work and doesn't do the rollback on my build/test server.
Any pointers? Thoughts? Points to check?