1

我想将涉及 DapperExtensions 函数的多个方法调用分组到一个事务下,这样如果有任何一个失败,我可以将它们全部回滚。

这涉及对预先存在的函数的调用,其中一些

  • 使用 DapperExtensions 谓词,和/或
  • 使用他们自己的连接。

答案需要允许单个事务下的谓词调用和多个连接。

我试过的

到目前为止,我已经找到了两种方法,TransactionScope 和 IDbConnection。

交易范围

using (var transactionScope = new TransactionScope())
{
      // Function calls here
     transactionScope.Complete();
}

尽管据我所知,这在 .Net Core 2.0 中应该可用,但我正在使用的 Dapper 和/或 DapperExtensions 调用似乎不支持它。运行它会给我以下错误:

 "Enlisting in Ambient transactions is not supported."

我浏览了有关这是否可行或将永远可行的文档,但结果是空的。

IDbTransaction

DapperExtensions 的谓词函数似乎支持这一点,但到目前为止,我找不到任何跨多个连接使用同一事务的示例。一些较早的帖子特别指出这是一种“基于连接”的事务方法,所以我不确定它是否可能。

我发现关于 DapperExtensions 的文档非常精简,所以如果有人能指出一些关于它的函数如何处理一般事务的参考资料,那也将非常有帮助!

4

2 回答 2

1

问题已在System.Data.SqlClient v4.5.

于 2018-07-31T15:51:37.170 回答
0

你可以这样使用它。

 using (var sqlConnection = new SqlConnection(configuration.GetConnectionString("DefaultConnection")))
                {
                    sqlConnection.Open();
                    using (var tx = sqlConnection.BeginTransaction())
                    {
                        var model = await sqlConnection.GetListAsync<T>(transaction:tx);
                        return model.ToList();
                    }              
                }
于 2021-08-09T10:59:58.920 回答