我正在寻找一个外部方法的工作示例,该方法包含一个调用内部方法的事务,该方法也包含一个事务。通常情况下,使用TransactionScope管理此类事情,但这似乎不适用于ServiceStack的OrmLite。
要明确,我不是在寻找如何设置交易。我正在寻找如何设置嵌套事务,以便使用OrmLite在最外层的事务中使用最里面的事务登记。
答案 0 :(得分:0)
我意识到这是一个古老的问题,但这是我偶然发现的事情。我的答案只与SqlServer有关,因此可能因提供商而异。
您在同一个连接上无法进行2次交易。如果您尝试打开多个交易,则会获得InvalidOperationException: SqlConnection does not support parallel transactions.
您可以拥有来自不同连接的嵌套事务:
using (var db = dbFactory.Open())
using (var tran = db.OpenTransaction())
{
// operations on db...
using (var nestedDb = dbFactory.Open())
using (var nestedTran = nestedDb.OpenTransaction())
{ // .Rollback/.Commit as required }
}
如果你调用nestedTran.Commit()
和tran.Rollback()
,使用上面的内容,那么尽管外部事务被回滚,nestedTran内所做的更改仍会保留。
但是,我已经使用TransactionScope
进行了快速测试,并且它与OrmLite.SqlServer一起正常工作。