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

admin 百科 11
Dapper 处理事务需手动管理:先打开连接,再调用 BeginTransaction() 获取 IDbTransaction;所有操作必须传入同一 transaction 参数;最后用 try-catch 确保 Commit() 或 Rollback() 成对执行,并推荐 using 释放资源。

Dapper如何处理事务 Dapper Transaction使用教程-第1张图片-佛山资讯网

在 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(),避免连接挂起或数据残留。

标签: app .net red

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~