在事务中包装每个sql/stored proc调用有什么好处?

Mat*_*tin 3 c# sql-server ado.net transactions

以下代码执行一个存储过程.存储过程中只有一个命令.包装事务中的所有内容是否有任何好处,即使它只有一个SQL语句(或只有一个sql语句的一个存储过程)?

在下面的示例代码中,如果删除失败,则失败.没有其他东西可以回滚(似乎).那么为什么一切都包含在交易中呢?

using (ITransactionManager transMan = repository.TransactionManager())
using (IController controller = repository.Controller())
{
    transMan.BeginTransaction();
    try
    {
        //DELETE FROM myTable where Id=@id
        controller.Delete(id);
        transMan.CommitTransaction();
    }
    catch
    {
        transMan.RollbackTransaction();
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 5

通过将其包装在事务中(因为将使用轻量级事务),您并没有真正失去太多,如果您向业务层添加更多逻辑,那么您已经有了工作事务管理.

此代码也适用于嵌套事务,而如果您未在此级别使用事务,则可能会失去一些好处,具体取决于代码和存储过程的结构.

另一种可能性是存储过程可能会更改并具有多个语句 - 同样,您仍然可以使用有效的事务管理.

我会保留它.