Dapper系列之二:Dapper的事务查询
Dapepr讲解
上篇文章我们介绍了,什么是Dapepr,有什么好处,性能的对比,还有多表多数据添加操作(事务的封装)等等。本篇文章我们继续讲解。。。。。如果本篇文章看不懂,请看我上一篇文章:Dapeper的入门 Select查询 1、首先我们先在SQLMapper中QueryMultiple()方法,在梳理Dapper中无意中发现,个人感觉不错,
//
// 摘要:
// Execute a command that returns multiple result sets, and access each in turn:
// 上句话的翻译是: 执行一个返回多个结果集的命令,并依次访问每个结果集
public static SqlMapper.GridReader QueryMultiple(this IDbConnection cnn, CommandDefinition command);
//
// 摘要:
// Execute a command that returns multiple result sets, and access each in turn
public static SqlMapper.GridReader QueryMultiple(this IDbConnection cnn, string sql, object param = null, IDbTransaction transaction = null,
int? commandTimeout = null, CommandType? commandType = null);
//
// 摘要:
// Execute a command that returns multiple result sets, and access each in turn
public static Task<SqlMapper.GridReader> QueryMultipleAsync(this IDbConnection cnn, CommandDefinition command);
//
// 摘要:
// Execute a command that returns multiple result sets, and access each in turn
public static Task<SqlMapper.GridReader> QueryMultipleAsync(this IDbConnection cnn, string sql, object param = null,
IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null);
2、老规矩我们在DapperDBContext 中加个方法,我们可以根据不同业务扩展方法,
/// <summary>
/// WueryMultiplie 执行一个返回多个结果集的命令,并依次访问每个结果集
/// </summary>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <param name="transaction"></param>
/// <param name="commandTimeout"></param>
/// <param name="commandType"></param>
/// <param name="databaseOption"></param>
/// <returns></returns>
public static Dapper.SqlMapper.GridReader QueryMultiple(string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null,
CommandType? commandType = null, int databaseOption = )
{
var conn = ConnectionFactory.MySqlConnection();
var sw = new Stopwatch(); sw.Start();
try
{
// 因为using 的作用域之后,连接自动关闭,
//这里需要说明的是,在数据读取完毕之后,不再需要SqlDataReader时,必须将其进行手动关闭
var restult = conn.QueryMultiple(sql, param, transaction, commandTimeout, commandType);
sw.Stop();
return restult;
}
catch (Exception ex)
{
LogHelper.ErrorLog(ex.ToString());
throw new Exception(ex.ToString());
}
}
注意事项:不知道你在上面代码中有没有遇到一个问题,上篇文章我们封装用到using,这次没有用到,是因为封装过程报错:报错:“阅读器关闭时尝试调用 Read 无效” ,原因也很简单:因为using 的作用域之后,连接自动关闭,这里需要说明的是,在数据读取完毕或者不再需要SqlDataReader时,必须将其进行手动关闭。
3、SQL调用
/// <summary>
/// 单表查数据
/// </summary>
/// <returns></returns>
public List<Department> select()
{
string sql = @"select *from Department";
var list = DapperDBContext.Query<Department>(sql, null).ToList();
//(多个结果集)为了比较就写一起
var all = selectAll();
var dep = all.Read<Department>().ToList();
var auth = all.Read<AuthResources>().ToList();
return list;
} /// <summary>
/// 多个结果集
/// </summary>
/// <returns></returns>
public Dapper.SqlMapper.GridReader selectAll()
{
var sql = "select * from Department; select * from AuthResources";
var multiReader = DapperDBContext.QueryMultiple(sql);
return multiReader;
}
效果:
- 博主是利用读书、参考、引用、复制和粘贴等多种方式打造成自己的纯镀 24k 文章,请原谅博主成为一个无耻的文档搬运工!
- 小弟刚迈入博客编写,文中如有不对,欢迎板砖扶正,希望对你有所帮助。
Dapper系列之二:Dapper的事务查询的更多相关文章
- CRL快速开发框架系列教程二(基于Lambda表达式查询)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- Dapper系列之三:Dapper的事务修改与删除
Dapepr的Update和Delete Dapper入门Dapper查询 上两篇文章我们介绍Dapper中添加和查询.本篇文章我们继续讲解修改和删除....如果本篇文章看不懂,请看阅读上两篇Dapp ...
- MySQL系列(二)---MySQL事务
MySql 事务 目录 MySQL系列(一):基础知识大总结 MySQL系列(二):MySQL事务 什么是事务(transaction) 保证成批操作要么完全执行,要么完全不执行,维护数据的完整性.也 ...
- Dapper系列之一:Dapper的入门(多表批量插入)
Dapper介绍 简介: 不知道博客怎么去写去排版,查了好多相关博客,也根据自己做过项目总结,正好最近搭个微服务框架,顺便把搭建微服务框架所运用的知识都进行博客梳理,为了以后复习,就仔细琢 ...
- NHibernate系列文章二十三:NHibernate查询之Criteria查询(附程序下载)
摘要 上一篇文章介绍了NHibernate HQL,他的缺点是不能够在编译时发现问题.如果数据库表结构有改动引起了实体关系映射的类有改动,要同时修改这些HQL字符串.这篇文章介绍NHibernate面 ...
- Dapper总结(二)---事务和存储过程
一 dapper使用事务 string sql1 = "insert into UserInfo values('user8',27,'s')"; string sql2 = & ...
- C# 数据操作系列 - 18 让Dapper更强的插件
0. 前言 在前一篇中我们讲到了Dapper的应用,但是给我们的感觉Dapper不像个ORM更像一个IDbConnection的扩展.是的,没错.在实际开发中我们经常用Dapper作为对EF Core ...
- ORM系列之三:Dapper
目录 1.Dapper 简介 2.Dapper 安装 3.Dapper 使用 Dapper简介 Dapper是一个轻量级的ORM框架,短小精悍,正如其名.对于小项目,使用EF,NHibernate这样 ...
- Oracle 学习系列之二(会话与事务级临时表和dual表 )
一. 会话临时表 --创建会话临时表create global temporary table tmp_user_session(user_id int, user_name varchar2(20) ...
随机推荐
- 分析PHP的include机制
php在解析include指令时,会对包含的文件路径做如下判断: 如果是绝对路径,则直接包含,并结束. 如果是相对路径,则做如下判断: 相对路径以特殊符号开头,如 "./1.php" ...
- android user 版本如何默认adb调试为打开【转】
本文转载自:http://blog.csdn.net/chaihuasong/article/details/50342119 A. 软件准备 user版本需要先打开USB debug开关,打开方式如 ...
- bzoj3136: [Baltic2013]brunhilda
这个题为什么会放在数据结构啊 首先因为有决策包容性,对于一个n每次必然选择一个n%p最大的p,令n减n%p 设fi表示i变成0的步数的话,同样我们可以知道f是有单调性的 假如fd能转移到fk,首先d一 ...
- 类的加载、时机、反射、模板设计、jdk7/jdk8新特性(二十六)
1.类的加载概述和加载时机 * A:类的加载概述 * 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. * 加载 * 就是指将class文 ...
- 动态的添加ImageView到LinearLayout中并居中显示
ImageView imageView = new ImageView(mActivity); imageView.setImageResource(R.mipmap.gengduo); Linear ...
- JQuery判断div(控件)是否为隐藏
以下是JavaScript 中判断div是否为隐藏代码引用片段: if (div.style.display == "none") { div.style.display = &q ...
- emacs环境配置
Cscope: 首先官网上下载cscope的源码包,解压进入,按照INSTALL的说明: ./configure make make install 但是在make时报如下错误:fatal error ...
- [转]C# Socket编程笔记
本文转自:http://www.cnblogs.com/stg609/archive/2008/11/15/1333889.html 原文如下: 看到这个题目,是不是很眼熟?在博客园里搜下,保证会发现 ...
- 详解Redis Cluster集群
Redis Cluster是Redis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需求.当遇到单机内存.并发.流量等瓶颈时,可以采用Cluster架构达到负载 ...
- Golang 读写锁RWMutex 互斥锁Mutex 源码详解
前言 Golang中有两种类型的锁,Mutex (互斥锁)和RWMutex(读写锁)对于这两种锁的使用这里就不多说了,本文主要侧重于从源码的角度分析这两种锁的具体实现. 引子问题 我一般喜欢带着问题去 ...