带DapperExtensions的TransactionScope?

时间:2018-07-31 14:57:08

标签: c# transactions .net-core dapper dapper-extensions

我想将涉及DapperExtensions函数的多个方法调用归为一个事务,以便在任何一个失败的情况下都可以将它们全部回滚。

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

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

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

我尝试过的

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

TransactionScope

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上的文档非常精简,因此,如果有人可以向我介绍一些有关其功能如何处理事务的参考资料,那也将非常有帮助!

2 个答案:

答案 0 :(得分:1)

issue已在System.Data.SqlClient v4.5中修复。

答案 1 :(得分: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();
                    }              
                }