前言

     上一篇随笔写了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. c#Winform程序调用app.config文件配置数据库连接字符串

    你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings name="  " connectionString= ...

  2. April 3 2017 Week 14 Monday

    Don't worry about finding your soul mate. Find yourself. 欲寻佳侣,先觅本心. You may fail to find your soul m ...

  3. 引用类型(三):Function类型

    一. Function类型函数实际上是对象.每个函数都是Function类型都实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象都指针.1.函数通常是使 ...

  4. 轻量级HTTP服务器Nginx(配置与调试Nginx维护Nginx)

    轻量级HTTP服务器Nginx(配置与调试Nginx) 文章来源于南非蚂蚁   Nginx安装完毕后,会产生相应的安装目录,根据前面的安装路径,Nginx的配置文件路径为/opt/nginx/conf ...

  5. win10 下的python虚拟环境安装使用(使用powershell)

    安装virtualenv 若要使用python虚拟环境进行开发,首先需要安装virtualenv.命令:pip install virtualenv 我已经装过了

  6. Spring boot 异常处理配置

    1.    新建Maven项目 exception 2.   pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0&quo ...

  7. theano中tensor的构造方法

    import theano.tensor as T x = T.scalar('myvar') myvar = 256 print type(x),x,myvar 运行结果: <class 't ...

  8. jQuery与Aiax应用

    Ajax(一部JavaScript和XML) 优势: ①不需要插件支持 ②优秀的用户体验:能在不刷新整个页面的前提下更新数据,这使得web应用程序能更为迅速地回应用户的操作. ③提高web程序的性能: ...

  9. python中的zipfile

    zipfile - Work with ZIP archives ZipFile.namelist() Return a list of archive members by name. 返回压缩成员 ...

  10. linux系统中 redis 保存数据的5种形式 linux后端模式启动 jedis无法通过IP地址和端口号访问如何修改linux防火墙

    vim修改redis.conf配置文件(我的已经复制到虚拟机的/usr/local/redis/bin目录下)为daemonize yes, 以后端模式启动 ./redis-server redis. ...