DapperLambda发布
DapperLambda发布
引言:因为接触过多个ORM,但使用的时候都遇到了各自的一些不够理想的地方,从最早开始开始公司自己分装的,到后面用EF,以及Dapper和DapperExtensions 到现在用的FluentData,就说说我自己的使用体验,在这几个相比之下,Dapper应该是最轻量级,而且性能也是最好的,但是相对比较简单了点。EF的最新版也没去使用,所以现在不是很了解,EF在这几个相比一下,功能是最强大的,但是启动加载慢,以及复杂的功能,后续人优化麻烦。FluentData 怎么说呢,用的都挺好用,而且语法是最容易让人理解,但是还是不支持Lambda。基于以上这些,所以萌生了我自己动手做一个ORM,性能能跟Dapper比肩,语法要简单,容易理解,所以很多地方借鉴了FluentData ,但是内部的逻辑是完全不一样的。
总的来讲的话, DapperLambda 就是Dapper和DapperExtensions的二次分装,使用语法和FluentData基本类似,并加上了Lambda.原则:封装和丰富这些功能不是为了不写SQL,而是做到简单的SQL,不希望在开发中重复写。。。
下面我将介绍在开发过程中的运用.
一:下载该项目并且引用DapperLambda.dll,在VS的命令窗口中执行 Install-Package DapperLambda

或是 在引用->管理NuGet程序包中搜索 DapperLambda

二.dll引用入到我们的数据业务层.
1.)创建并且初始化一个DbContext.
它是我们与数据库操作中的上下文,所有的有关数据操作都调用它下面的方法;目前只针对MSSQL进行了单元测试,后续会继续完善在其他数据库中使用,所以非MSSQL,使用请谨慎

1 public static DbContext GetContext()
2 {
3 string connectionStr = "server=(local);User ID=sa;Password=password01!;Database=LocalDB;Persist Security Info=True;Pooling=true;Max Pool Size=700";
4 return new DbContext().ConnectionString(connectionStr, DatabaseType.MSSQLServer);
5 }

2.)接下来就正式开始介绍DapperLambda的语法,因为部分语法都一致,所以在第一篇就不介绍了,后续都有详细介绍,就挑几个不一样的了解一下
- 支持Lamba设置条件和排序 ,最终会得到一个SQL,(关于如果监控执行过程,后续会介绍) 执行返回得到IEnumerable<T>

1 [TestMethod]
2 public void TestOrderByMethod()
3 {
4 using (var context = DBHelper.GetContext())
5 {
6 var ls = context.Select<Application>().Where(p => p.CategoryID == 1).OrderBy(p => p.ApplicationID).QueryMany();
7 Assert.IsTrue(ls.Count() > 0);
8 }
9 }

直接上图吧,最直接
当然在这条件和排序都是可以进行多次组合如下:

1 [TestMethod]
2 public void TestConditionMethod()
3 {
4 using (var context = DBHelper.GetContext())
5 {
6 var ls = context.Select<Application>().Where(p => p.ApplicationID == 1000 || p.CategoryID == 1).And(c => c.Owner == "CNLIFAN").OrderBy(p => p.ApplicationID).QueryMany();
7 Assert.IsTrue(ls.Count() > 0);
8 }
9 }

2.Lambda指定条件、动态指定更新的字段,以防更新额外字段

1 public void UpdateMethod()
2 {
3 using (var context = DBHelper.GetContext())
4 {
5 var item = context.Update<MobileForTest>().Set(new { MobileHolder = "TEST-10", MobilePhone = "18923456789" }).Where(p => p.ID == 1).Execute();
6 Assert.IsTrue(item > 0);
7 }
8 }

3.查询语句嵌套,最终合并成一个大的SQL执行

1 public void Delete3Method()
2 {
3 using (var context = DBHelper.GetContext())
4 {
5 var item = context.Delete<MobileForTest>().WhereIsIn(p => p.ID, context.Select<Application>(p => p.ApplicationID == 10001).Select(p => p.CategoryID)).Execute();
6 Assert.IsTrue(item > 0);
7 }
8 }


1 [TestMethod]
2 public void SQLMethod13()
3 {
4 using (var context = DBHelper.GetContext())
5 {
6 var item = context.Select<MobileForTest>().WhereNotIn(p => p.ID, context.Select<Application>(p => p.ApplicationID == 10001).Select(p => p.CategoryID)).QuerySingle();
7 Assert.IsTrue(item.ID == 1);
8 }
9 }


1 [TestMethod]
2 public void SQLMethod14()
3 {
4 using (var context = DBHelper.GetContext())
5 {
6 var curID = context.Select<MobileForTest>(p => p.ID == 1).Select(item => new { ID = item.ID, Mobile = item.MobilePhone }).QueryDynamicSingle();
7 var pkID = curID;
8 }
9 }

灵活指定返回想要的字段
4.方便的使用事物

1 [TestMethod]
2 public void UseTransactionMethod()
3 {
4 var pkid = 1;
5 var model = new MobileForTest { MobileHolder = "TEST-linfengFang", MobilePhone = "18911112222", Status = 0 };
6 using (var context = DBHelper.GetContext().UseTransaction(true))
7 {
8 context.Insert<MobileForTest>(model).Execute();
9 var item = context.Sql("UPDATE MobileForTest SET MobileHolder = 'SQLMethod-linfeng' WHERE ID=@ID", new { ID = pkid }).Execute();
10 context.Commit();
11 }
12 }

5.在项目中更加使用的分页功能

1 [TestMethod]
2 public void SQLPage()
3 {
4 var record = 0;
5 using (var context = DBHelper.GetContext())
6 {
7 var pageIndex = 0;
8 var pageSize = 3;
9 context.Select<MobileForTest>(p => p.MobilePhone == "18911112222" && p.ID != 1).QueryPage(pageIndex, pageSize, out record);
10 Assert.IsTrue(record > 0);
11 }
12 }
13 [TestMethod]
14 public void SQLPage2()
15 {
16 var record = 0;
17 using (var context = DBHelper.GetContext())
18 {
19 var pageIndex = 0;
20 var pageSize = 3;
21 var ls = context.Sql("select * from MobileForTest").QueryPage<MobileForTest>(pageIndex, pageSize, out record);
22 Assert.IsTrue(record > 0);
23 }
24 }

相对其他的ORM,做了以上的封装,还有大部分基本的功能与其他的语法,也比较类似,所以开篇没提到,目前都已经支持了。欢迎大家任意使用,如果有遇到问题,都可以给我留言,
代码在后续会版本稳定和代码规整后,会考虑进行开源。
DapperLambda发布的更多相关文章
- 微型 ORM 的第一篇 DapperLambda发布
引言:因为接触过多个ORM,但使用的时候都遇到了各自的一些不够理想的地方,从最早开始开始公司自己分装的,到后面用EF,以及Dapper和DapperExtensions 到现在用的FluentDat ...
- MIP 官方发布 v1稳定版本
近期,MIP官方发布了MIP系列文件的全新v1版本,我们建议大家尽快完成升级. 一. 我是开发者,如何升级版本? 对于MIP页面开发者来说,只需替换线上引用的MIP文件为v1版本,就可以完成升级.所有 ...
- Taurus.MVC 2.0 开源发布:WebAPI开发教程
背景: 有用户反映,Tausus.MVC 能写WebAPI么? 能! 教程呢? 嗯,木有! 好吧,刚好2.0出来,就带上WEBAPI教程了! 开源地址: https://github.com/cyq1 ...
- DBImport V3.7版本发布及软件稳定性(自动退出问题)解决过程分享
DBImport V3.7介绍: 1:先上图,再介绍亮点功能: 主要的升级功能为: 1:增加(Truncate Table)清表再插入功能: 清掉再插,可以保证两个库的数据一致,自己很喜欢这个功能. ...
- 发布:.NET开发人员必备的可视化调试工具(你值的拥有)
1:如何使用 1:点击下载:.NET可视化调试工具 (更新于2016-12-29 19:11:00) (终于彻底兼容了部分VS环境下无法使用的问题) 2:解压RAR后执行:CYQ.VisualierS ...
- 微软发布正式版SQL Server 2016
微软于今天在SQL 官方博客上宣布 SQL Server 数据库软件的正式发布版本(GA),历时一年多,微软为该软件发布了多个公共预览版和候选版本,而今天最终版本终于上线了.在博客中,微软数据集团的企 ...
- Castle Core 4.0.0 alpha001发布
时隔一年多以后Castle 项目又开始活跃,最近刚发布了Castle Core 4.0.0 的alpha版本, https://github.com/castleproject/Core/releas ...
- 在离线环境中发布.NET Core至Windows Server 2008
在离线环境中发布.NET Core至Windows Server 2008 0x00 写在开始 之前一篇博客中写了在离线环境中使用.NET Core,之后一边学习一边写了一些页面作为测试,现在打算发布 ...
- ASP.NET Core应用针对静态文件请求的处理[1]: 以Web的形式发布静态文件
虽然ASP.NET Core是一款"动态"的Web服务端框架,但是在很多情况下都需要处理针对静态文件的请求,最为常见的就是这对JavaScript脚本文件.CSS样式文件和图片文件 ...
随机推荐
- OCP读书笔记(6) - 手动恢复操作
6.Restore and Recovery Task 非关键性文件丢失的恢复 临时文件丢失的恢复 临时表空间文件丢失的恢复: 查看数据库中的临时文件: SQL> select file#,ST ...
- Accord.Net中决策树
Accord.Net中决策树 决策树介绍 决策树是一类机器学习算法,可以实现对数据集的分类.预测等.具体请阅读我另一篇博客(http://www.cnblogs.com/twocold/p/54245 ...
- 解决:Determining IP Information for eth0 一直停留 无法进入系统
问题场景: vm centos6.4网卡之前一直没异常,可今天启动时一直卡在Determining IP Information for eth0,无法进入系统.网上说了非常多办法,大多都是不着边的说 ...
- Spring MVC中一般 普通类调用service
在Spring MVC中,Controller中使用service只需使用注解@Resource就行,但是一般类(即不使用@Controller注解的类)要用到service时,可用如下方法: 1.S ...
- c/c++中main函数参数讲解
参考地址: http://blog.csdn.net/cnctloveyu/article/details/3905720 我们经常用的main函数都是不带参数的.因此main 后的括号都是空括号.实 ...
- SWT的TableVierer的使用一
1,简单显示,表格的式样见注释中的内容 import org.eclipse.jface.viewers.TableViewer;import org.eclipse.swt.SWT;import o ...
- 采用DWR、maven保存数据到数据库
一.原理: Ajax是时下比较流行的一种web界面设计新思路,其核心思想是从浏览器获取XMLHttp对象与服务器端进行交互. DWR(Direct Web Remoting)就是实现了这种Ajax技术 ...
- MYSQL正在使用select发现现场记录方法,包括一个逗号分隔的字符串
首先,我们创建一个逗号分隔字符串. CREATE TABLE test(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),pname VARCHAR ...
- [POJ 3150] Cellular Automaton (矩阵高速幂 + 矩阵乘法优化)
Cellular Automaton Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 3048 Accepted: 12 ...
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block 开发人员经常编写需要安全功能的应用程序.这些应用程序 ...