让你的Dapper像EF一样调用 开源~!

什么是Dapper?


     
  Dapper是一款轻量级的ORM框架,大名鼎鼎!
由谷歌(谷歌)谷歌 开发,在N款orm框架中 成效是最快的 最高的! 经过数据测试
比EF高 12-20 倍

        海外最大的技艺网站 stackoverflow
也是按照那么些Orm框架开发的,并且卓殊简单。

 

为何选用Dapper?


  1. 轻量。惟有一个文件(SqlMapper.cs),编译完结之后惟有120k(好象是变胖了)
  2. 进度快。Dapper的进程接近与IDataReader,取列表的数额超过了DataTable。
  3. 支撑多样数据库。Dapper可以在拥有Ado.net
    Providers下办事,包蕴sqlite, sqlce, firebird, oracle, MySQL,
    PostgreSQL and SQL Server
  4. 可以映射一对一,一对多,多对多等二种涉嫌。
  5. 品质高。通过Emit反射IData里德r的体系队列,来快捷的获取和爆发对象,品质不错。
  6. 支持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改装后
 var id = 0001;//根据Id查询数据
 var entity=_repExample.GetById(id);



--------------------------例子(二)----------------------------


 //Dapper原生 获取数据表总项数
 var count=   conn.ExecuteScalar<int>("SELECT COUNT(*) FROM customers Where  Type=A");

 //经过小弟Dapper改装后
 //获取数据表总数
 var count01= _repExample.GetCount(); //不带条件
 var count02 =_repExample.GetCount(item => item.Age > 30 && item.CreateTime<new DateTime(2017,8,10));//带条件


-------------------------例子(三)-------------------------------------

 //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");
return count>0; //通过判断count是否大于0

//经过小弟Dapper改装后
bool IsExist= _repExample.Exists(item => item.Phone == "10086");

 

 数据的 增删改 操作

---------------------------例子(一)-------------------------------------------

//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改装后

var 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() ;
 var  item= _repExample.Update(entity);//单条模型更新
 bool succ= _repExample.Update(entityList);//批量更新 内置事物操作 失败其中一条错误 全部回滚
 bool succ = _repExample.Update(id,new { Name="张三",Age=22});//部分字段更新 

------------------------------例子(三)--------------------------------------------

//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() ;
var  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 > 20 && item.Name.Contains("C#%")); //开头模糊查询
 _repExample.GetTableData(item => item.Age > 20 && item.Name.Contains("%深入理解C#%"));//包含模糊查询
 _repExample.GetTableData(item => item.Age > 20 && item.Name.Contains("%Join Skeet"));//结尾模糊查询

 //分页查询
 long pageTotal;//输出当前表总项数
 _repExample.GetPageData(1, 20, out pageTotal);
 _repExample.GetPageData(1, 20, out pageTotal, item => item.Age > 30);//根据条件分页

 //获取视图数据
 _repExample.QueryView<ExampleBusinessModel>("View_视图名称");
 _repExample.QuerySql<T_Example>("select Name,Age,Phone from T_Example");//执行原生Sql

 

 

多表事物操作实例

  var dbset01 = ContextFactory.CreateDbSet<TB_EmpInfo>(); 
  var dbset02 =
ContextFactory.CreateDbSet<TB_EmpDetail>();

//dapper的事物处理就不贴出代码了
//只贴小弟Dapper改装过后的代码
  var succ=_repExample.Submit(
            {
                //在这里执行你具体的事物操作       
                dbset01.Insert(new T_Example());//A表插入一条数据  
                dbset02.Delete(id);   //再删除B表的数据

            });

sqlite, 

再有很多打包方法 三弟还来尚寅时间增添现在兄弟把代码开源 你可以依据自己的须要开展扩充

源码都有注释 很不难懂
有啥看法欢迎质询三弟 小弟QQ407015811

sqlite 1

 

 

源码地址 

https://files.cnblogs.com/files/frame943581425/Dapper%E5%B0%81%E8%A3%85.rar

文本表达

Dapper    Dll程序集   需求引入

DapperExtensions   Dll程序集
要求引入

DapperContext.cs 封装代码 

 

 

网站地图xml地图