C# 如何在EF4中回滚以进行单元测试拆卸?

C# 如何在EF4中回滚以进行单元测试拆卸?,c#,entity-framework,unit-testing,transactions,vs-unit-testing-framework,C#,Entity Framework,Unit Testing,Transactions,Vs Unit Testing Framework,在我关于EF4中回滚事务的研究中,似乎每个人都提到或提供了类似的解释。在我的场景中,我想在一个单元测试场景中这样做,在这个场景中,我想回滚我在单元测试上下文中所做的一切,以防止更新数据库中的数据(是的,我们将增加计数器,但这没关系)。为了做到这一点,最好遵循以下计划吗?我是否遗漏了一些概念或其他主要功能(除了我的SetupMyTest和PerformMyTest功能实际上不存在) 为此,我们使用TransactionScope private TransactionScope trans

在我关于EF4中回滚事务的研究中,似乎每个人都提到或提供了类似的解释。在我的场景中,我想在一个单元测试场景中这样做,在这个场景中,我想回滚我在单元测试上下文中所做的一切,以防止更新数据库中的数据(是的,我们将增加计数器,但这没关系)。为了做到这一点,最好遵循以下计划吗?我是否遗漏了一些概念或其他主要功能(除了我的
SetupMyTest
PerformMyTest
功能实际上不存在)


为此,我们使用TransactionScope

    private TransactionScope transScope;

    #region Additional test attributes
    //
    // Use TestInitialize to run code before running each test 
    [TestInitialize()]
    public void MyTestInitialize()
    {
        transScope = new TransactionScope();
    }

    // Use TestCleanup to run code after each test has run
    [TestCleanup()]
    public void MyTestCleanup()
    {
        transScope.Dispose();
    }

这将回滚在任何测试中所做的任何更改。

Hmm,在EF4中,显然SaveChanges(false)重载已被弃用。似乎SaveChanges(SaveOptions.AcceptAllChangesAfterSave)是它的替代品,因此我在原始问题中进行了更新。在编写/调试测试时,您是否遇到挂起事务的问题?我更喜欢对共享数据库执行此操作,但我不希望这样做,因为我们经常处理挂起的事务。如果不执行dispose,您将得到挂起的事务。如果没有dispose,事务将一直挂起,直到超时。是否可以更新代码示例以显示基本测试的外观?
SaveChanges(SaveOptions.AcceptAllChangesAfterSave)
是否正确?
    private TransactionScope transScope;

    #region Additional test attributes
    //
    // Use TestInitialize to run code before running each test 
    [TestInitialize()]
    public void MyTestInitialize()
    {
        transScope = new TransactionScope();
    }

    // Use TestCleanup to run code after each test has run
    [TestCleanup()]
    public void MyTestCleanup()
    {
        transScope.Dispose();
    }