我已经进行了很多搜索,但是找不到直接的答案。
我有两个存储过程,它们都被导入到DBContext对象中
我想把它们交易。 (即,如果InsertB()失败,则回滚InsertA())
我怎么做?我可以只声明一个TransactionScope对象并包装两个存储过程吗?
谢谢
最佳答案
您需要在事务范围中注册您的操作,如下所示:
using(TransactionScope tranScope = new TransactionScope())
{
InsertA();
InsertB();
tranScope.Complete();
}
出错时,事务范围将自动回滚。当然,您仍然需要处理异常,并按照异常处理设计的指示(日志等)执行所有操作。但是,除非您手动调用
Complete()
,否则当using
范围结束时,事务将回滚。除非您在同一事务范围中打开其他数据库连接(请参阅here),否则事务范围不会被提升为分布式事务。
要知道,这很重要,因为否则,您将需要在此操作涉及的所有服务器(Web,最终的中间层,SQL Server)上配置MSDTC。因此,只要不将该事务升级为分布式事务,就可以了。
注意:
为了微调您的事务选项,例如超时和隔离级别,请查看this
TransactionScope
constructor。默认隔离级别是可序列化的。附加样本: here。
关于c# - Entity Framework : How to put multiple stored procedures in a transaction?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11194143/