ServiceStack的OrmLite支持嵌套事务吗?如果支持,如何操作?

4
我正在寻找一个实际的工作示例,其中包含一个事务的外部方法调用一个也包含事务的内部方法。通常使用TransactionScope来管理这种情况,但这似乎不能与ServiceStack的OrmLite一起使用。
明确一点,我不是在寻找如何设置事务。我正在寻找如何设置嵌套事务,使得最内层的事务能够使用OrmLite参与最外层的事务。
1个回答

0

我知道这是一个老问题,但这是我偶然发现的。我的答案只与SqlServer相关,所以可能因提供程序而异。

在同一连接上无法有两个事务。如果尝试打开多个事务,将会出现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正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接