考虑以下代码:
ExecuteSQL("UPDATE ...");
using (var t = new TransactionScope())
{
ExecuteSQL("UPDATE ...");
if (SomeCondition)
t.Commit();
else
t.Rollback();
}
var result = ExecuteSQL("SELECT ...");
然后我们使用外部TransactionScope编写一个自动测试,以在每次测试后回滚更改:
[TestInitialize]
public override void Initialize()
{
_transaction = new TransactionScope();
}
[TestCleanup]
public override void Cleanup()
{
_transaction.Dispose();
}
当SomeCondition为false时,不可能为案例编写正确的测试。因为嵌套事务 ROLLBACK 回滚整个外部事务,包括第一个 UPDATE 语句。
你知道任何解决方法吗?