前言

     上一篇随笔写了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. Azure 进阶攻略 | 上云后的系统,「门禁」制度又该如何实现?

    各位办公室白领们,不妨回想一下自己每天去公司上班时的一些细节. 为避免「闲杂人等」进入工作场所,我们需要证明自己是这家公司的员工才能进入,对吧!所有员工,无论所属部门或职位,都必须先证明自己身份,例如 ...

  2. nvd3基于时间轴流程图

    doc http://nvd3-community.github.io/nvd3/examples/documentation.html https://github.com/mbostock/d3/ ...

  3. webpack前端构建工具学习总结(一)之webpack安装、创建项目

    npm是随nodeJs安装包一起安装的包管理工具,能解决NodeJS代码部署上的很多问题: 常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器 ...

  4. Bucking the stigma (留学生请摘掉有色眼镜看社区大学)

    Many Chinese students second-guess the benefits of attending a US community college. 很多中国学生对去美国社区大学学 ...

  5. 为什么CRM Opportunity的删除会触发一个通向BW系统的RFC

    今天工作时我发现,我在SE38里用函数CRM_ORDER_DELETE删除一个Opportunity,居然弹出下图这个SAP Logon的屏幕,要连接BR1.这是什么鬼?! 查了一下,BR1是BW系统 ...

  6. selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH. 错误处理方法

    首次使用selenium webdriver,webdriver.Firefox() 报错selenium.common.exceptions.WebDriverException: Message: ...

  7. select_related()函数

    Django获取数据实体的时候,返回的对象一个实体或多个实体,也就是QuerySet,它是Django专有的东西,具体的理解,它是类似Python的字典的东西,但它并不实现字典的所有方法.今天讲解的是 ...

  8. DOM节点(二):操作节点

    appendChild() 用于向childNodes列表的末尾添加一个节点. var returnedNode = someNode.appendChild(newNode); 如果传入的节点已经是 ...

  9. Centos6.4环境下DNS服务器的搭建

    DNS服务器搭建很繁琐吗?给你个简单的招吧! 配置域主服务器 阶段: 1.在bind的主配置文件中添加该域 2.在/var/named中创建该域的zone文件 3.编辑zone文件,添加需要的信息 4 ...

  10. 剑指offer40

    class Solution { public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { ) ret ...