博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dapper.Extension的基本使用
阅读量:6499 次
发布时间:2019-06-24

本文共 4823 字,大约阅读时间需要 16 分钟。

前言

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

1.获取单个实体  

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

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

2.获取多个实体List

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

public List
ExtList() { using (IDbConnection conn = new SqlConnection(sqlconnection)) { IList
sortlist = new List
(); sortlist.Add(new Sort { PropertyName = "id", Ascending = false });//排序条件 IList
preList = new List
(); preList.Add(Predicates.Field
(o => o.id, Operator.Eq, 2));//搜索条件,Operator有很多种的类型如eq是等于、like相当于是sql的like用法还有Lt、Le等 BetweenValues betweenValues = new BetweenValues();//搜索条件,between搜索两个值之间的数据 betweenValues.Value1 = 1; betweenValues.Value2 = 6; preList.Add(Predicates.Between
(o => o.id, betweenValues)); var subPre = Predicates.Field
(o => o.id, Operator.Eq, 3);//搜索条件,判断是否存在一个条件,后面的布尔参数如果是true表明不存在,false是存在 preList.Add(Predicates.Exists
(subPre,true)); preList.Add(Predicates.Property
(o => o.id , Operator.Eq , t => t.id));//判断两个字段的关系,比如是否相等、大于、小于等和Field差不多,并不能用于两张表的字段判断 IPredicateGroup predGroup = Predicates.Group(GroupOperator.Or, preList.ToArray());//确认多个搜索条件的连接方式AND 或者 OR var list = conn.GetList
(predGroup, sortlist).ToList
(); 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
ExtPageList() { using (IDbConnection conn = new SqlConnection(sqlconnection)) { IList
sortlist = new List
(); sortlist.Add(new Sort { PropertyName = "id", Ascending = false });//排序条件 IList
preList = new List
(); preList.Add(Predicates.Field
(o => o.id, Operator.Eq, 2)); IPredicateGroup predGroup = Predicates.Group(GroupOperator.Or, preList.ToArray()); return conn.GetPage
(predGroup,sortlist,1,10).ToList(); } }

4.添加

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

5.更新

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

6.删除

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

 

转载于:https://www.cnblogs.com/xwc1996/p/9580771.html

你可能感兴趣的文章
timesten 修改最大连接数
查看>>
weblogic域,管理服务器,受管服务器,集群和机器的基本知识
查看>>
mouseover与mouseenter,mouseout与mouseleave的区别
查看>>
Python---内置函数
查看>>
JMeter打开脚本报错处理方法
查看>>
【SICP练习】136 练习3.67
查看>>
虚拟文件系统(VFS)
查看>>
免费正则表达式辅助工具(转)
查看>>
610D - Vika and Segments(线段树+扫描线+离散化)
查看>>
C/C++利用三元组实现稀疏矩阵运算
查看>>
数据库连接池,实现及分析
查看>>
新闻网站个人中心(查询用户的关注信息)流程分析
查看>>
3.7Python数据处理篇之Numpy系列(七)---Numpy的统计函数
查看>>
c++各种数据类型表示范围
查看>>
导入导出Android手机文件
查看>>
求几亿个数中不重复元素的个数
查看>>
构建RESTful风格的WCF服务
查看>>
Android:ViewPager为页卡内视图组件添加事件
查看>>
紫书 习题 10-17 UVa 11105 (筛法)
查看>>
ASP.NET 下载文件方式
查看>>