让你的Dapper像EF一样调用 开源~!
什么是Dapper?
Dapper是一款轻量级的ORM框架,大名鼎鼎! 由谷歌Google 开发,在N款orm框架中 效率是最快的 最高的! 经过数据测试 比EF快 12-20 倍
国外最大的技术网站 stackoverflow 也是基于这个Orm框架开发的,并且非常简单。
为什么使用Dapper?
- 轻量。只有一个文件(SqlMapper.cs),编译完成之后只有120k(好象是变胖了)
- 速度快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。
- 支持多种数据库。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server
- 可以映射一对一,一对多,多对多等多种关系。
- 性能高。通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能不错。
- 支持FrameWork2.0,3.0,3.5,4.0,4.5
正文
对Dapper做了简单介绍, 有关Dapper优点的文章网上一大堆, 这里小编就不再赘述啦! 进入正题 相信很多园友的公司都使用过微软的EF框架吧?
EF的优点太多了 “CodeFist代码优先”、" 不需要为数据访问编写所有需要的ADO.NET管道代码"、"使用C#代码来编写所有的数据访问逻辑而不是编写SQL查询和存储过程"等等....
但是最大的缺点就是过于臃肿 庞大 性能不咋地!很多公司都放弃采用这个框架选择使用自己封装的SqlHelper类或其它第三方orm框架
但是由于被EF惯坏了 让小弟觉得其它的ORM框架都没EF便捷 快速 于是小弟想能不能把现今最流行的Dapper改成类似EF的调用模式! 所以这篇博客出来了!
先看几个例子
操作数据表的数据
--------------------------例子(一)------------------------
//Dapper原生 根据Id获取数据 string query = "SELECT * FROM Book WHERE id = @id"; book = conn.Query<Book>(query, new { id = id }).SingleOrDefault(); //经过小弟Dapper改装后 ;//根据Id查询数据 T_Example entity=_repExample.GetById(id);
--------------------------例子(二)----------------------------
//Dapper原生 获取数据表总项数 var count= conn.ExecuteScalar<int>("SELECT COUNT(*) FROM customers Where Type=A"); //经过小弟Dapper改装后 //获取数据表总数 var count01= _repExample.GetCount(); //不带条件 && item.CreateTime<,,));//带条件
-------------------------例子(三)-------------------------------------
//Dapper原生获取第一条数据 var entity= _Conn.QueryFirst<T_Example>("Select* from T_Example where Name==啊爆g");
//经过小弟Dapper改装后 var entity = _repExample.GetFist(item => item.Name == "啊爆g");//使用lambda式
-------------------------------例子(四)--------------------------------------- //Dapper原生检查数据是否存在 var count= conn.ExecuteScalar<int>("SELECT COUNT(*) FROM customers Where Type=A"); ; //通过判断count是否大于0 //经过小弟Dapper改装后 ");
数据的 增删改 操作
---------------------------例子(一)-------------------------------------------
//dapper原生Insert插入数据 Book book = new Book(); book.Name="C#本质论"; string query = "INSERT INTO Book(Name)VALUES(@name)"; //对对象进行操作 conn.Execute(query, book); //直接赋值操作 conn.Execute(query, new {name = "C#本质论"});
//经过小弟Dapper改装后
T_Example item= _repExample.Insert(entity);//单挑插入 bool succ= _repExample.Insert(entityList);//批量插入 内置事物操作 失败其中一条错误 全部回滚
--------------------------例子(二)-------------------------------------------
//daper原生Update更新数据 string query = "UPDATE Book SET Name=@name WHERE id =@id"; conn.Execute(query, book); //经过小弟Dapper改装后
var entity = new T_Example() ; T_Example item= _repExample.Update(entity);//单条模型更新 bool succ= _repExample.Update(entityList);//批量更新 内置事物操作 失败其中一条错误 全部回滚 });//部分字段更新
------------------------------例子(三)--------------------------------------------
//dapper原生Delete删除数据 string query = "DELETE FROM Book WHERE id = @id"; conn.Execute(query, book); conn.Execute(query, new { id = id }); //经过小弟Dapper改装后 var entity = new T_Example() ; T_Example item= _repExample.Delete(id);//删除数据 单条 bool succ= _repExample.Delete(IEnumerable<object> ids);//批量删除 内置事物操作 失败其中一条错误 全部回滚
数据查询操作实例
//dapper原生查询 string query = "SELECT * FROM Book Where Name Like %C#%"; //无参数查询,返回列表,带参数查询和之前的参数赋值法相同。 conn.Query<Book>(query).ToList(); //经过小弟改装后
_repExample.GetAll();//获取数据表所有数据 _repExample.GetAll(new { Name = true });//字段排序true 升序 false降序 //根据条件获取数据 _repExample.GetTableData(item => item.Age > && item.Name.Contains("C#%")); //开头模糊查询 _repExample.GetTableData(item => item.Age > && item.Name.Contains("%深入理解C#%"));//包含模糊查询 _repExample.GetTableData(item => item.Age > && item.Name.Contains("%Join Skeet"));//结尾模糊查询 //分页查询 long pageTotal;//输出当前表总项数 _repExample.GetPageData(, , out pageTotal); _repExample.GetPageData(, , );//根据条件分页 //获取视图数据 _repExample.QueryView<ExampleBusinessModel>("View_视图名称"); _repExample.QuerySql<T_Example>("select Name,Age,Phone from T_Example");//执行原生Sql
多表事物操作实例
//dapper的事物处理就不贴出代码了
//只贴小弟Dapper改装过后的代码
var succ=_repExample.Submit(tran =>
{
//在这里执行你具体的事物操作
_repExample.InsertTran(new T_Example(),tran);//A表插入一条数据
_repLog.DeleteTran(id, tran); //再删除B表的数据
});
还有很多封装方法 小弟还来没有时间扩展 现在小弟把代码开源 你可以根据自己的需求进行扩展
虽然小弟只有3年半 编程经验 但是自认为代码还是写的规范 源码都有注释 很容易懂 有什么意见欢迎质询小弟 小弟QQ407015811

让你的Dapper像EF一样调用 开源~!的更多相关文章
- C# EF框架调用数据库的函数
1.在数据库中创建一个自定义函数: REATE FUNCTION [dbo].[f_IsOriginsDisabled] ( ), @needPPTV bit ) RETURNS bit AS BEG ...
- 第七节:EF Core调用SQL语句和存储过程
一. 查询类(FromSql) 1.说明 A. SQL查询必须返回实体的所有属性字段. B. 结果集中的列名必须与属性映射到的列名相匹配. C. SQL查询不能包含关联数据 D. 除Select以为的 ...
- .net core 基于Dapper 的分库分表开源框架(core-data)
一.前言 感觉很久没写文章了,最近也比较忙,写的相对比较少,抽空分享基于Dapper 的分库分表开源框架core-data的强大功能,更好的提高开发过程中的效率: 在数据库的数据日积月累的积累下,业务 ...
- 在使用EF时调用DBFUNCTION扩展方法时,发生ENTITYCOMMANDEXECUTIONEXCEPTION 异常的解决办法
System.Data.Entity.Core.EntityCommandExecutionException : An error occurred while executing the comm ...
- .net core EF Core 调用存储过程
在这里,我们将尝试去学习一下 .net core EF Core 中调用存储过程. 我们知道,EF Core 是不支持直接调用存储过程的,那它又提供了什么样的方式去执行存储过程呢?有如下方法: 1.F ...
- .NET(C#)有哪些主流的ORM框架,SqlSugar,Dapper,EF还是...
前言 在以前的一篇文章中,为大家分享了<什么是ORM?为什么用ORM?浅析ORM的使用及利弊>.那么,在目前的.NET(C#)的世界里,有哪些主流的ORM,SqlSugar,Dapper, ...
- SqlFunctions 可以在EF种调用sqlserver的函数
在EF5环境下,首先添加EF环境,在引用中添加Syste.Data.Entity,再添加命名空间 using System.Data.Objects.SqlClient; 然后写一个控制器测试 pub ...
- EF 6 调用存储过程时返回多结果集和OUTPUT参数问题
原文地址:http://q.cnblogs.com/q/56836/ 各位大侠,提问一个关于EF6调用存储过程时返回多结果集和OUTPUT参数问题 目前已经可以调用存储过程并且可以返回多个结果集. 但 ...
- MVC+EF+PagedList+调用通用存储封装+多表联合信息展示分页+存储过程分页
主要的技术点不在这里一一阐述,相关存储也是引用别人的,主要技术点就是通过最优性能方式处理需求,PagedList.包需要在线安装就可以 直接上干货 1.存储代码之第一种: 参数相对多点 /**//* ...
随机推荐
- [leetcode-560-Subarray Sum Equals K]
Given an array of integers and an integer k, you need to find the total number of continuous subarra ...
- jq-animate实现返回顶部效果
jq-animate实现返回顶部效果: <!doctype html> <html lang="en"> <head> <meta cha ...
- git的使用[转]
本节内容 github介绍 安装 仓库创建& 提交代码 代码回滚 工作区和暂存区 撤销修改 删除操作 远程仓库 分支管理 多人协作 github使用 忽略特殊文件.gitignore 为什么要 ...
- 元组-tuple功能介绍
#元组 不可变类型 相当于只读的列表,不可被修改,不可被修改哦 ##创建元组最后加,最后加, 形成良好的习惯 """ tuple() -> empty tuple ...
- DotNetCore跨平台~Dockerfile的解释
回到目录 大叔感觉网上对Dockerfile的说明不是很清楚,或者说怎么去用说的不清楚,在vs2017里我们可以去建立自己的Dockerfile文件,然后你的项目可以被生成一个镜像,把它推到仓库之后, ...
- springmvc+jdbc连接数据库(第一个微商项目,代理注册)
String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");手动自动生成Uuid ...
- 微信公众号调用JS-SDK
坑:先设置js接口安全域名,在公众号设置-功能设置-js接口安全域名中设置 授权登录功能需要在开发者中心页配置授权回调域名 文档:http://mp.weixin.qq.com/wiki/7/aaa1 ...
- 小哈学Python第四课--运算符
运算符: 1.算数运算符: 2. 比较运算符 3.赋值运算符 4. 逻辑运算符: 5. 成员运算:
- Java - static的注意点
静态函数与静态变量无需生成对象 静态函数只能调用静态变量 装载类的时候执行静态代码块 静态函数中不能使用this /* * For test static * 2014-10-26 */ public ...
- 基于微信小程序的系统开发准备工作
腾讯推出微信小程序也有一段时间了,在各种行业里面也都掀起一阵阵的热潮,很多APP应用被简化为小程序的功能迅速推出,同时也根据小程序的特性推出各种独具匠心的应用,相对传统的APP来说,微信小程序确实能够 ...