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