Dapper如何处理事务 Dapper Transaction使用教程

煙雲
发布: 2025-12-19 12:56:40
原创
962人浏览过
Dapper 处理事务需手动管理:先打开连接,再调用 BeginTransaction() 获取 IDbTransaction;所有操作必须传入同一 transaction 参数;最后用 try-catch 确保 Commit() 或 Rollback() 成对执行,并推荐 using 释放资源。

dapper如何处理事务 dapper transaction使用教程

在 Dapper 中处理事务,核心就一条:把 IDbTransaction 对象传给所有需要参与事务的数据库操作方法。Dapper 本身不管理事务,而是复用 ADO.NET 的事务机制,所以必须手动控制连接状态和提交/回滚逻辑。

事务前必须打开连接

Dapper 的 BeginTransaction() 要求数据库连接已处于打开状态,否则会抛异常。这点和普通查询不同——后者可由 Dapper 自动打开/关闭连接,但事务场景下必须显式调用 Open()

  • ✅ 正确写法:connection.Open(); var tx = connection.BeginTransaction();
  • ❌ 错误写法:直接对未打开的连接调用 BeginTransaction()

所有操作都要传入同一个 transaction 参数

无论是 ExecuteQuery 还是 QuerySingle,只要想纳入事务范围,就必须把上一步创建的 IDbTransaction 实例通过 transaction: 参数传进去。漏传一次,该操作就游离在事务之外。

  • 示例插入+查 ID:connection.Execute(sqlInsert, data, tx);
  • 紧接着查刚生成主键:int id = connection.QuerySingle<int>("SELECT SCOPE_IDENTITY();", transaction: tx);</int>
  • 再插入关联记录:connection.Execute(sqlLog, logData, tx);

成功提交或失败回滚必须成对出现

事务生命周期靠 Commit()Rollback() 控制。建议用 try-catch 包裹全部操作,正常走 Commit(),异常时立刻 Rollback(),避免连接挂起或数据残留。

Websphere教程 中文WORD版
Websphere教程 中文WORD版

本文档是Websphere教程;WebSphere 是因特网的基础架构软件,也就是我们所说的中间件。它使企业能够开发、部署和集成新一代电子商务应用(如 B2B 的电子交易),并且支持从简单的 Web 发布到企业级事务处理的商务应用。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

Websphere教程 中文WORD版 0
查看详情 Websphere教程 中文WORD版
  • 不要只写 Commit() 却忽略异常分支
  • 回滚后记得重新抛出异常(如 throw;),否则上层可能误判为成功
  • 推荐使用 using 确保 transaction 对象及时释放

跨多个表或存储过程也能统一事务

不管是原生 SQL 还是调用存储过程,只要共用同一个 IDbTransaction,就能保证原子性。比如下单时同时更新订单表、扣减库存、写日志,全在一个事务里完成。

  • 调用存储过程:connection.Execute("sp_CreateOrder", param, tx, commandType: CommandType.StoredProcedure);
  • 批量插入:connection.Execute(sql, list, tx);(list 是 IEnumerable)
  • 多结果集(如查用户+查角色):var grid = connection.QueryMultiple(sql, tx);

基本上就这些。不复杂但容易忽略细节,关键是连接要开、transaction 要传、commit/rollback 要配对。

以上就是Dapper如何处理事务 Dapper Transaction使用教程的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号