我是否需要处理C#app层中的事务以及单个插入的数据库存储过程以及多个插入?
C#
try
{
using (var transaction = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted }))
{
//Call Data Access Layer---Executing S proc
transaction.Complete();
return result;
}
}
catch (Exception ex)
{
throw new Exception();
}
SQL存储过程:
Create process
As
Begin try
Begin transaction
Commit
End try
Begin catch
Rollback
End catch
答案 0 :(得分:0)
我建议你在这里考虑每个组件的职责。
您的存储过程有自己的任务。如果存储过程有多个必须全部执行的语句,那么是的,该过程应该创建&管理自己的交易。
例如,如果存储过程的任务是更新用户的电子邮件地址然后生成审计记录,那么这两个步骤都应该在过程内的事务中。该事务对于完成任务的过程是必要的。
但是,您的应用程序可能具有比单个存储过程更大的任务 - 您可能正在执行需要多个过程的任务。在这种情况下,应用程序应为应用程序的任务创建和管理事务。
如果您的应用程序每次调用存储过程时都创建一个事务,它(通常)不会造成任何伤害。但这并不是管理应用层交易的重点。在应用程序层创建事务的关键是将 set 操作串起来。
如果您发现应用程序层通常执行与存储过程一对一的复杂操作,您可能需要重新考虑您的体系结构。