咨询区

  • Amit

我的项目中使用 dapper.net 做数据库连接框架,有一个需求需要在多个表上执行多次插入操作,我想把它 事务化,但我看 dapper 并没有提供类似的方式。

请问我该如何使用 dapper 来做这项工作呢?

回答区

  • Newteq Developer

如果用 Dapper 实现事务功能,大概有三种实现方式。

  1. 简单的事务方法

这种事务方式很原始,就是在已存在的 Connection 上创建 Transaction, 然后将事务作为参数传递到 Execute 方法中,当业务逻辑处理完后,再做 commit 提交,参考如下代码:

string sql = "INSERT INTO Customers (CustomerName) Values (@CustomerName);";using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
{connection.Open();using (var transaction = connection.BeginTransaction()){connection.Execute(sql, new {CustomerName = "Mark"}, transaction: transaction);connection.Execute(sql, new {CustomerName = "Sam"}, transaction: transaction);connection.Execute(sql, new {CustomerName = "John"}, transaction: transaction);transaction.Commit();}
}
  1. 使用 TransactionScope

如果你喜欢用 TransactionScope 方式,有一点要注意,那就是需要在 connection 创建之前创建 Scope,然后在 Scope 作用域内做你想做的sql操作,最后执行一个 complete 提交即可,参考如下代码:

using (var transaction = new TransactionScope())
{var sql = "INSERT INTO Customers (CustomerName) Values (@CustomerName);";using (var connection = My.ConnectionFactory()){connection.Open();connection.Execute(sql, new {CustomerName = "Mark"});connection.Execute(sql, new {CustomerName = "Sam"});connection.Execute(sql, new {CustomerName = "John"});}transaction.Complete();
}
  1. 使用 Dapper Transaction 方式

这是使用 Dapper 最推荐的方式,毕竟它的代码语义太强了,你可以直接在 new 出的 Transaction 之上执行各自的sql语句,参考如下代码:

string sql = "INSERT INTO Customers (CustomerName) Values (@CustomerName);";using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
{connection.Open();using (var transaction = connection.BeginTransaction()){transaction.Execute(sql, new {CustomerName = "Mark"});transaction.Execute(sql, new {CustomerName = "Sam"});transaction.Execute(sql, new {CustomerName = "John"});transaction.Commit();}
}

点评区

说实话,这三种方式总结的特别好,但有一点看着很不爽,那就是在执行 Transaction 之前需要 connection.Open(),有点繁琐,所以这一块还是可以再封装一下的。

如何在 Dapper.NET 中使用事务?相关推荐

  1. Camstar开发思考:如何在C#代码中控制事务

    目录 开发现状 开发问题 解决方案 1)自定义UserFunction 2)预调用服务 预调用服务方案设计与实现 代码设计 实现结果 开发现状 Camstar开发过程中,业务代码通常写在以下位置: 1 ...

  2. Spring中的事务管理详解

    在这里主要介绍Spring对事务管理的一些理论知识,实战方面参考上一篇博文: http://www.cnblogs.com/longshiyVip/p/5061547.html 1. 事务简介: 事务 ...

  3. spring事务管理器的作用_【面试必问】Spring中的事务管理详解

    在这里主要介绍Spring对事务管理的一些理论知识,实战方面参考上一篇博文: http://www.cnblogs.com/longshiyVip/p/5061547.html 1. 事务简介: 事务 ...

  4. 在WCF中启用事务的6个步骤

    目录 简介和目标 第1步:创建两个WCF服务小号 第 2 步:使用TransactionFlow的属性接口方法 第 3 步:使用TransactionScopeRequired对实现进行属性 步骤 4 ...

  5. 如何在 Spring 生态中玩转 RocketMQ?

    作者 | 通融.洛夜 来源 | 阿里巴巴云原生公众号 RocketMQ 作为业务消息的首选,在消息和流处理领域被广泛应用.而微服务生态 Spring 框架也是业务开发中最受欢迎的框架,两者的完美契合使 ...

  6. 如何在Spring生态中玩转RocketMQ?

    简介: RocketMQ作为业务消息的首选,在消息和流处理领域被广泛应用.而微服务生态Spring框架也是业务开发中最受欢迎的框架,两者的完美契合使得RocketMQ成为Spring Messagin ...

  7. @sql 单元测试_如何在SQL单元测试中使用假表?

    @sql 单元测试 In this article on SQL unit testing, we will talk about how to isolate SQL unit tests from ...

  8. 如何在SQL Server中实现错误处理

    错误处理概述 (Error handling overview) Error handling in SQL Server gives us control over the Transact-SQL ...

  9. yii2 跨域请求配置_如何在SpringBoot应用中实现跨域访问资源和消息通信?

    允许跨域访问 CORS ( Cross Origin Resource Sharing,跨域资源共享)机制允许Web应用服务器进行跨域访问控制,从而使跨域数据传输得以安全进行.浏览器支持在API容器中 ...

最新文章

  1. set debug mode for flex builder
  2. Django2.0——模板渲染(一)
  3. 用surfaceView实现高性能动画
  4. 计算机组装课的评课记录,听课反思信息技术课堂教学心得体会
  5. 【Lucene】Lucene的使用和优化
  6. mvc html validator,ASP.NET MVC实现Validation验证器扩展
  7. WPF开源控件扩展库 - MaterialDesignExtensions
  8. 哪个读书app可以导入txt_QQ阅读iphone版怎么导入电子书 三种手机QQ阅读器导入本地图书图文教程...
  9. 96KB存储器的怎么算地址范围_产品条码怎么申请费用
  10. ECCV 2020 GigaVision挑战赛“行人和车辆检测”和“多目标追踪”冠军方案解读
  11. 栈的应用(进制转换)
  12. matlab中的低通freqs,matlab数字低通滤波器 MATLAB一阶低通滤波器的设计
  13. 计算机科学导论第5版ppt,计算机科学导论第5讲-1.ppt
  14. sqlite3数据存储最多存储多少条数据?达到上限如何处理?_把 14 亿人拉到一个微信群,如何实现?...
  15. 计算机网络八大性能指标
  16. 如何在Windows上启用JavaScript
  17. v4手游服务器维护,v4手游每日必做事项分享
  18. 使用Java导出Excel表格并由浏览器直接下载——基于POI框架
  19. Qt面试笔试题问答经验总结
  20. 【TeXstudio】【2】一般的图片和表格的表现形式

热门文章

  1. 在CentOS中安装gcc配置c语言开发环境(转)
  2. Spring Security3源码分析-http标签解析(转)
  3. 检查可执行文件所需要的共享库
  4. Apache 2.0性能优化—MPM的选择与配置
  5. 启动与停止mysql服务的命令
  6. 对flex-grow和flex-shrink的深入理解
  7. Python -bs4介绍
  8. oracle 基本异常的练习及各个错误码
  9. XidianOJ 1019 自然数的秘密
  10. 辉光UIView的category