前言

     上一篇随笔写了Dapper的简单的使用,这次写一下Dapper.Extension的使用,它是Dapper的简单的封装扩展,可以通过实例化的对象赋值后进行增删改的操作以及分页,但是却不能进行多表查询的操作,这个需要自己来扩展吧。事务的操作的话和Dapper是一样的。

1.获取单个实体  

  这个比较简单直接传入id就可以获取返回的对象,如下所示:

        public Student ExtGet()
{
using(IDbConnection conn = new SqlConnection(sqlconnection))
{
return conn.Get<Student>();//这里只能传id查询,并且Student的字段必须与表字段匹配,多一个少一个都会报错.所以获取单个的对象感觉还是Dapper的原生语句好
//return conn.Get<Student>(" select id,score,courseId,studentId from Student where id = 1 ");//会报nvarchar转换int报错
}
}

2.获取多个实体List

  具体代码以及注释如下所示:

        public List<Student> ExtList()
{
using (IDbConnection conn = new SqlConnection(sqlconnection))
{
IList<ISort> sortlist = new List<ISort>();
sortlist.Add(new Sort { PropertyName = "id", Ascending = false });//排序条件 IList<IPredicate> preList = new List<IPredicate>();
preList.Add(Predicates.Field<Student>(o => o.id, Operator.Eq, ));//搜索条件,Operator有很多种的类型如eq是等于、like相当于是sql的like用法还有Lt、Le等 BetweenValues betweenValues = new BetweenValues();//搜索条件,between搜索两个值之间的数据
betweenValues.Value1 = ;
betweenValues.Value2 = ;
preList.Add(Predicates.Between<Student>(o => o.id, betweenValues)); var subPre = Predicates.Field<Student>(o => o.id, Operator.Eq, );//搜索条件,判断是否存在一个条件,后面的布尔参数如果是true表明不存在,false是存在
preList.Add(Predicates.Exists<Student>(subPre,true)); preList.Add(Predicates.Property<Student,Student>(o => o.id , Operator.Eq , t => t.id));//判断两个字段的关系,比如是否相等、大于、小于等和Field差不多,并不能用于两张表的字段判断 IPredicateGroup predGroup = Predicates.Group(GroupOperator.Or, preList.ToArray());//确认多个搜索条件的连接方式AND 或者 OR
var list = conn.GetList<Student>(predGroup, sortlist).ToList<Student>();
return list;
//以上代码生成的sql语句如下
//exec sp_executesql N'SELECT [Student].[id], [Student].[name], [Student].[sex], [Student].[tel] FROM [Student]
//WHERE (([Student].[id] = @id_0)
//OR
// ([Student].[id] BETWEEN @id_1 AND @id_2)
//OR
// (NOT EXISTS (SELECT 1 FROM [Student] WHERE ([Student].[id] = @id_3)))
//OR
//([Student].[id] = [Student].[id]))
//ORDER BY [Student].[id] DESC',N'@id_0 int,@id_1 int,@id_2 int,@id_3 int',@id_0=2,@id_1=1,@id_2=6,@id_3=3
}
}

3.分页

  分页具体和GetList的方法是一样的,只是多了页码和每页数据数量参数,具体代码如下:

        public List<Student> ExtPageList()
{
using (IDbConnection conn = new SqlConnection(sqlconnection))
{
IList<ISort> sortlist = new List<ISort>();
sortlist.Add(new Sort { PropertyName = "id", Ascending = false });//排序条件 IList<IPredicate> preList = new List<IPredicate>();
preList.Add(Predicates.Field<Student>(o => o.id, Operator.Eq, ));
IPredicateGroup predGroup = Predicates.Group(GroupOperator.Or, preList.ToArray());
return conn.GetPage<Student>(predGroup,sortlist,,).ToList();
}
}

4.添加

        /// <summary>
/// 添加,只能单条添加
/// 通过传入组装好的类对象,就可以插入数据
/// 如果没有数据会是NULL或者是数据库字段的默认值
/// </summary>
public void ExtAdd()
{
using (IDbConnection conn = new SqlConnection(sqlconnection))
{
Student student = new Student();
student.name = "测试学生";
student.sex = ;
//student.tel= "13222222222";
int id = conn.Insert<Student>(student);//返回自增主键id
}
}

5.更新

        /// <summary>
/// 更新,只能单条更新
/// 如果有字段没有赋值的情况下,会导致数据库字段更新为NULL,
/// 所以需要注意,保证数据的完整
/// </summary>
public void ExtUpdate()
{
using (IDbConnection conn = new SqlConnection(sqlconnection))
{
Student student = new Student();
student.id = ;
student.name = "测试学生";
student.sex = ;
//student.tel= "13222222222";
if (conn.Update<Student>(student))
{
//成功
}
else
{
//失败
}
}
}

6.删除

        /// <summary>
/// 删除,只能单条删除
/// 这边可以通过传入有id的实体或者Predicates对象来指定删除的条件,
/// Predicates的话和List那部分的操作是一样的,可以参考ExtList种详细的使用
/// </summary>
public void ExtDel()
{
using (IDbConnection conn = new SqlConnection(sqlconnection))
{
Student student = new Student();
student.id = ;
var pre = Predicates.Field<Student>(o => o.id, Operator.Eq, );
if (conn.Delete<Student>(student))//或者conn.Delete<Student>(pre)
{
//成功
}
else
{
//失败
}
}
}

Dapper.Extension的基本使用的更多相关文章

  1. 开源Dapper的Lambda扩展-Sikiro.Dapper.Extension V2.0

    前言 去年我在业余时间,自己整了一套dapper的lambda表达式的封装,原本是作为了一个个人的娱乐项目,当时也只支持了Sql Server数据库.随之开源后,有不少朋友也对此做了试用,也对我这个项 ...

  2. Dapper连接与事务的简单封装

    增删改查方面,已经有Dapper.Extension这么强大的工具了,我也实在没啥好写的,就随手写了个看起来比较优雅的连接与事务的封装.在之后使用Dapper.Extension类库时,完全可以照搬进 ...

  3. Dapper.Contrib.Extensions问题

    Dapper.Contrib.Extensions问题 Dapper.Extension.1.0.0.1\lib\net45\Dapper.Extension.dll Dapper.Contrib.1 ...

  4. EF、Dapper、NHibernate等ORM框架的比较及优缺点

    什么是ORM? ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操 ...

  5. Dapper.Common基于Dapper的开源LINQ超轻量扩展

    Dapper.Common Dapper.Common是基于Dapper的LINQ实现,支持.net core,遵循Linq语法规则.链式调用.配置简单.上手快,支持Mysql,Sqlserver(目 ...

  6. [LINQ2Dapper]最完整Dapper To Linq框架(七)---仓储模式

    目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...

  7. [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询

    此例子是使用LINQ2Dapper封装,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架,只依赖于Dapper 支持.net framework4.5.1 ...

  8. [LINQ2Dapper]最完整Dapper To Linq框架(三)---实体类关系映射

    此特性需要安装Kogel.Dapper.Mssql或者Oracle 3.06及以上版本,实体类层需要安装Kogel.Dapper.Extension 3.06及以上版本 目录 [LINQ2Dapper ...

  9. 1、Dapper介绍

    1.Dapper是一个轻量级的O/R框架,性能强劲,支持原生sql与模型对象混合写法,通过DapperExtension插件可以实现纯模型的操作(零Sql)语句. 2.创建VS 项目,添加相关的依赖包 ...

随机推荐

  1. MySQL免安装版中 my-default.ini 的配置

    拷贝一份  “my-default.ini”  文件 重命名为 “my.ini” 这样根目录下就有两个.ini文件了 一个是my-default.ini 一个是my.ini 接下来我们只需修改my.i ...

  2. SINAMICS S120 Parking axis设置,安转拆除或屏蔽电机

    1) P897 Parking axis selection 此参数可以连接到周期通讯的报文中(PZD) 2) 标准报文111中,已经连接此参数

  3. 【js基础修炼之路】- 手把手教你实现bind

    手写bind前我们先回顾一下bind有哪些特性,以便更好的理解bind和实现bind. bind的特性 var obj = { a: 100, say(one, two) { console.log( ...

  4. Android(java)学习笔记141:Android下的逐帧动画(Drawable Animation)

    1. 帧动画: 帧动画顾名思义,一帧一帧播放的动画就是帧动画. 帧动画和我们小时候看的动画片的原理是一样的,在相同区域快速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,其实不过是N张图片在一帧一 ...

  5. 广搜,深搜,单源最短路径,POJ(1130),ZOJ(1085)

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=85 http://poj.org/problem?id=1130 这 ...

  6. VPS一键测试脚本 / 自带结果导出

    脚本命令 一下脚本可能卡住,运行时间长,建议在screen中运行. 1.秋水逸冰大佬的Bench.sh脚本 特点:用时较短,对系统测试全面,英文:但缺少国内节点测速 有趣的是,bench.sh既是脚本 ...

  7. centos6.x yum 安装 mysql5.6 mysql5.7

    先卸载低版本MYSQL yum remove mysql* rpm -ivh http://repo.mysql.com/mysql-community-release-el6.rpm yum ins ...

  8. SVN知识集合

    1. 如果某个项目之前保存了A仓库的信息,无法切换到B仓库(通过AnkhSVN或者VisualSVN),可以先在本地去除版本控制(用TortoiseSVN),然后导出B仓库信息(用TortoiseSV ...

  9. 配置SSIS 包部署

    包配置是干嘛滴! 使用包配置可以从开发环境的外部设置运行时属性和变量.         把用户变量转换成Config文件 步骤: 准备工作 把第一个例子中的userinfo.txt复制两份,放到同一个 ...

  10. 第9章 初识HAL固件库

    本章参考资料:<STM32F76xxx参考手册>.<STM32F7xx规格书>.<Cortex-M3权威指南>, STM32 HAL库帮助文档:<STM32F ...