我的DAL中有以下方法:
public void SavePlan()
{
using (TransactionScope scope =
new TransactionScope(TransactionScopeOption.RequiresNew))
{
CallSaveDataProc();
CallLogMsgProc();
scope.Complete();
}
}
我故意在CallLogMsgProc
中放置COMMIT事务而不创建事务。这导致从SQLException
过程抛出CallLogMsgProc
并且scope.Complete()
永远不会执行。
但是,在我的数据库中,我仍然看到第一种方法CallSaveDataProc
保存的记录。我做错了吗?
答案 0 :(得分:0)
启动/提交事务必须配对,并且最好每个对在理想情况下应该在相同的范围内(尽管每对不必与另一对在同一范围内)。
因此,您可以通过新的TransactionScope
开始交易,然后在您的存储过程中Commit
(正如您所见)TransactionScope
,然后是尝试提交由{{1}}“看到”的交易,该交易现已无效。