ServiceStack的OrmLite是否支持嵌套事务?如果是这样,怎么样?

时间:2014-03-17 08:10:44

标签: c# transactions ormlite-servicestack

我正在寻找一个外部方法的工作示例,该方法包含一个调用内部方法的事务,该方法也包含一个事务。通常情况下,使用TransactionScope管理此类事情,但这似乎不适用于ServiceStack的OrmLite。

要明确,我不是在寻找如何设置交易。我正在寻找如何设置嵌套事务,以便使用OrmLite在最外层的事务中使用最里面的事务登记

1 个答案:

答案 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一起正常工作。