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)
通过将其包装在事务中(因为将使用轻量级事务),您并没有真正失去太多,如果您向业务层添加更多逻辑,那么您已经有了工作事务管理.
此代码也适用于嵌套事务,而如果您未在此级别使用事务,则可能会失去一些好处,具体取决于代码和存储过程的结构.
另一种可能性是存储过程可能会更改并具有多个语句 - 同样,您仍然可以使用有效的事务管理.
我会保留它.