title: How to rollback in EF4 for Unit Test TearDown?
body: <p>In my research about rolling back transactions in EF4, it seems everybody refers to <a href="http://blogs.msdn.com/alexj/archive/2009/01/11/savechanges-false.aspx" rel="nofollow noreferrer">this blog post</a> or offers a similar explanation. In my scenario, I'm wanting to do this in a unit testing scenario where I want to rollback practically everything I do within my unit testing context to keep from updating the data in the database (yeah, we'll increment counters but that's okay). In order to do this, is it best to follow the following plan? Am I missing some concept or anything else major with this (aside from my <code>SetupMyTest</code> and <code>PerformMyTest</code> functions won't really exist that way)?</p>
  
  <pre><code>[TestMethod]
  public void Foo
  {
    using (var ts = new TransactionScope())
    {
      // Arrange
      SetupMyTest(context);
  
      // Act
      PerformMyTest(context);
      var numberOfChanges = context.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
      // if there's an issue, chances are that an exception has been thrown by now.
  
      // Assert
      Assert.IsTrue(numberOfChanges &gt; 0, "Failed to _____");
  
      // transaction will rollback because we do not ever call Complete on it
    }
  }
  </code></pre>