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 项目,添加相关的依赖包 ...
随机推荐
- Osclass-3.6.1 (Openlogic CentOS 7.2)
平台: CentOS 类型: 虚拟机镜像 软件包: osclass3.6.1 cms commercial content management ecommerce open-source 服务优惠价 ...
- JavaMail 的简单使用
概述 邮件功能模块在大多数网站中,都是必不可少的功能模块.无论是用户注册还是重置密码,邮件都是比较常用的一个方式.本文主要介绍 JavaMail 的简单使用,方便大家快速开发,供大家参考.完整的 de ...
- Ubuntu 系统安装
1.首先下载一个Ubuntu系统文件,以.ios后缀结尾的系统镜像文件压缩包. 2,下载一个ultraiso软件,用于制作u盘启动盘 3,将电脑重启,进入BOIS界面,调整系统顺序, 将启动盘系统设置 ...
- FYI-django数据库操作-外键
我先定义两个模型,一个是作者,一个是作者出版的书籍,算是一对多的类型. class Person(models.Model); name = models.CharField('作者姓名', ma ...
- Axure 8 Tab制作
1 在[页面]面板中选中[page1] 2 在[元件库]中选中[动态面板],并拖拽到[设计区域]中 3 双[设计区域]中的动态面板,打开[动态面板管理]页面 4 在[动态面板管理]页面中输入动态面板的 ...
- VPS一键测试脚本 / 自带结果导出
脚本命令 一下脚本可能卡住,运行时间长,建议在screen中运行. 1.秋水逸冰大佬的Bench.sh脚本 特点:用时较短,对系统测试全面,英文:但缺少国内节点测速 有趣的是,bench.sh既是脚本 ...
- 2018.9.5 Java中使用栈来模拟队列
栈的规律是是先进后出 队列的规律是先进先出 栈模拟队列 首先我们定义两个栈,一个放数据,一个出数据,判断B栈是否有元素,有元素则直接pop:没有元素则需要我们将A里面的元素出栈然后放到B里面,再取出, ...
- c# 语法 字符串内插
结果截屏 参考文章 https://www.cnblogs.com/csproj/p/Interpolated_Strings.html c# 6.0语法 https://www.cnblogs.co ...
- Thinkphp 5 使用DOMDocument
每一个载入浏览器都会生成一个 Document 对象. Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问.Document 对象是 Window 对象的一部分. 我们项目 ...
- 开发者不容错过的10款免费JavaScript游戏引擎
摘要:使用HTML5.JavaScript可以帮助开发者开发出各种与众不同的游戏及游戏特效,比如3D动画.Canvas等.本文介绍10款被广泛使用的基于HTML5的JavaScript游戏引擎. 在G ...