Dapper.Extension的基本使用
前言
上一篇随笔写了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的基本使用的更多相关文章
- 开源Dapper的Lambda扩展-Sikiro.Dapper.Extension V2.0
前言 去年我在业余时间,自己整了一套dapper的lambda表达式的封装,原本是作为了一个个人的娱乐项目,当时也只支持了Sql Server数据库.随之开源后,有不少朋友也对此做了试用,也对我这个项 ...
- Dapper连接与事务的简单封装
增删改查方面,已经有Dapper.Extension这么强大的工具了,我也实在没啥好写的,就随手写了个看起来比较优雅的连接与事务的封装.在之后使用Dapper.Extension类库时,完全可以照搬进 ...
- Dapper.Contrib.Extensions问题
Dapper.Contrib.Extensions问题 Dapper.Extension.1.0.0.1\lib\net45\Dapper.Extension.dll Dapper.Contrib.1 ...
- EF、Dapper、NHibernate等ORM框架的比较及优缺点
什么是ORM? ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操 ...
- Dapper.Common基于Dapper的开源LINQ超轻量扩展
Dapper.Common Dapper.Common是基于Dapper的LINQ实现,支持.net core,遵循Linq语法规则.链式调用.配置简单.上手快,支持Mysql,Sqlserver(目 ...
- [LINQ2Dapper]最完整Dapper To Linq框架(七)---仓储模式
目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...
- [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询
此例子是使用LINQ2Dapper封装,效率优于EntityFramwork,并且支持.NetFramework和.NetCore框架,只依赖于Dapper 支持.net framework4.5.1 ...
- [LINQ2Dapper]最完整Dapper To Linq框架(三)---实体类关系映射
此特性需要安装Kogel.Dapper.Mssql或者Oracle 3.06及以上版本,实体类层需要安装Kogel.Dapper.Extension 3.06及以上版本 目录 [LINQ2Dapper ...
- 1、Dapper介绍
1.Dapper是一个轻量级的O/R框架,性能强劲,支持原生sql与模型对象混合写法,通过DapperExtension插件可以实现纯模型的操作(零Sql)语句. 2.创建VS 项目,添加相关的依赖包 ...
随机推荐
- 《ArcGIS Runtime SDK for Android开发笔记》——(1)、Android Studio下载与安装
1.前言 Android Studio 是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工 ...
- 异常处理 try...catch...finally 执行顺序, 以及对返回值得影响
异常处理 try...catch...finally 执行顺序, 以及对返回值得影响 结论:1.不管有没有出现异常,finally块中代码都会执行:2.当try和catch中有return时,fina ...
- JavaScript(一) 对象基础
1.定义类或对象 1.1 混合的构造函数/原型方法 用构造函数定义对象的所有非函数属性,类似于Java的构造方法.用原型方法定义对象的函数属性(方法).这种方法是使用比较广泛的定义类或对象的方法. / ...
- 音乐代码 (DNF天空之城、欢乐颂)。
太感人了 DNF天空之城 #include <cstdio> #include <windows.h> #define qdo 262 #define qre 294 #def ...
- 如何查看某个用户指定时间段的ABAP开发记录
输入用户名和想查询的时间段: 执行得到结果.双击可查看具体代码: 工具源代码: REPORT tool_dev_history. PARAMETERS: name TYPE usr02-bname O ...
- MySQL 中while loop repeat 的基本用法
-- MySQL中的三中循环 while . loop .repeat 求 1-n 的和 -- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法: while 条件 DO 循 ...
- C语言学生成绩管理系统(简易版)
#include<stdio.h> #include<stdlib.h> #include<string.h> int readstudents(struct st ...
- jquery 操作DOM元素(1)
.clone() 创建一个匹配的元素集合的深度拷贝. .clone([withDataAndEvents]) withDataAndEvents (默认为false) 一个Boolean 表示是否会复 ...
- cordova-plugin-themeablebrowser 0.2.17 "ThemeableBrowser"ionic跳转外链插件在ios中heardBar会遮住内容的bug
ionic+angular的app项目中需要在App打开一个外部的url链接,用了这个插件发现在iPhone手机中会出现toolbar挡住url页面内容 解决方法: 在原有基础上加上statusBar ...
- [异常笔记] spring cloud 服务消费者启动-2018040501
一.异常信息: Error starting ApplicationContext. To display the auto-configuration report re-run your appl ...