C# 如何在EF4中回滚以进行单元测试拆卸?
在我关于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
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();
}