考慮下面的代碼回滾只有嵌套事務:是否有可能用於自動測試
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語句在內的整個外部事務。
您是否知道任何解決方法?
是否有任何使用SAVE TRANSACTION的TransactionScope包裝? – alexey
@alexey嘗試將命令本身傳遞給服務器,而不使用任何包裝器 –
@alexey ...並注意,TransactionScope默認情況下爲SERIALIZABLE,非常易於使用8-) –