【问题标题】:Does ServiceStack's OrmLite support nested transactions? If so, how?ServiceStack 的 OrmLite 是否支持嵌套事务?如果是这样,怎么做?
【发布时间】:2014-03-17 08:10:44
【问题描述】:

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

明确地说,我不是在寻找如何设置交易。我正在寻找如何设置嵌套事务,以便使用 OrmLite 在最外层事务中 enlist 进行最内层事务。

【问题讨论】:

    标签: c# transactions ormlite-servicestack


    【解决方案1】:

    我意识到这是一个老问题,但这是我偶然发现的。我的回答仅与 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 一起工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多