Dapper查询时如何指定事务 Dapper在事务中执行Query

Dapper 本身不管理事务,但可通过显式传入 IDbTransaction 参数在 ADO.NET 事务中执行查询与更新,需确保连接已打开、事务由该连接创建,并由开发者手动调用 Commit() 或 Rollback()。

dapper查询时如何指定事务 dapper在事务中执行query

Dapper 本身不管理事务,但可以配合 ADO.NET 的 SqlTransaction 在事务中执行查询。关键在于:**把已开启的事务显式传给 Dapper 的查询方法**。

使用 IDbTransaction 参数传入事务

Dapper 的所有查询方法(如 QueryQueryFirstOrDefaultExecute 等)都支持可选的 IDbTransaction 参数。只要传入有效的事务对象,Dapper 就会在该事务上下文中执行 SQL。

确保连接(IDbConnection)已打开,且事务由该连接开启事务对象必须是同一连接创建的,跨连接传入会抛出异常事务生命周期由你手动控制(Commit() / Rollback()),Dapper 不参与提交或回滚

典型用法示例(SQL Server)

C# 示例:

using (var connection = new SqlConnection(connectionString)){    connection.Open();    using (var transaction = connection.BeginTransaction())    {        try        {            // 在事务中查询            var users = connection.Query(                "SELECT * FROM Users WHERE Status = @status",                 new { status = "Active" },                 transaction); // ← 关键:传入 transaction
        // 在事务中更新        int rows = connection.Execute(            "UPDATE Orders SET Processed = 1 WHERE UserId IN @userIds",             new { userIds = users.Select(u => u.Id).ToArray() },             transaction);        transaction.Commit(); // 手动提交    }    catch    {        transaction.Rollback(); // 出错时手动回滚        throw;    }}

}

注意事项和常见问题

事务未提交前,其他连接默认看不到未提交的变更(取决于隔离级别)如果查询语句本身含 BEGIN TRANSACTIONCOMMIT,可能干扰外部事务,应避免异步方法(如 QueryAsync)同样支持 IDbTransaction 参数,用法一致使用 TransactionScope 时,Dapper 会自动感知环境事务(需开启连接并调用 Open()),但显式传参更清晰可控

基本上就这些。核心就是“连接开、事务启、参数传、自己管提交”。不复杂但容易忽略传参这一步。

以上就是Dapper查询时如何指定事务 Dapper在事务中执行Query的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1442857.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 19:27:35
下一篇 2025年12月11日 22:51:46

相关推荐

发表回复

登录后才能评论
关注微信