轻量ORM-SqlRepoEx (一)SqlRepoEx介绍
一、SqlRepo项目
发现SqlRepo项目库是在构建自动代码工具时。对于数据访问,在.Net下,有很多选择,比如EF,但EF使用起来,不是很方便的。以前一直使用Atk.Expression库+System.Data.SqlClient来进行数据操作,总体来说希望有这样一个ORM:
1、能方便支持Mysql、SQLServert等数据库;
2、框架不能复杂、功能强大但不需要牺牲数据访问速度;
3、能使用Lambda表达式,以方便.Net强大的功能;
4、使用强类型而不是弱类型构建;
5、能需时转换成SQL语句,易用Lambda表达式来构建拼接SQL语句,减少魔法字串的出现。
SqlRepo项目是一个.NET库,用于构建带有Lambda表达式的SQL语句,并将结果映射到对象的工具。在使用SqlRepo中,发现基本能达到要求。但在使用中,发现不少bug,同时功能上不是特别完善,所以Fork了一个,强化其功能,将其命名为SqlRepoEx。并增加如下(1)自定特性;(2)、动态指定查询源;(3)解决拼接语句,使用where以外方法时,缺少Where子句时的错误;(4)、增加操作时,不再受限于实例必需有Id的自增自段;(5)、表达示使时,可直接使用变量;
二、简单的例子
1、有如下业务类
public class ToDo
{
public DateTime CreatedDate { get; set; }
public bool IsCompleted { get; set; }
public string Task { get; set; }
}
2、使用SqlRepoEx查询
var repository = RepoFactory.Create<ToDo>();
var results = repository.Query()
.Select(e => e.Id, e => e.Task, e => e.CreatedDate)
.Where(e => e.IsCompleted == false)
.Go();
3、在2中,如果与数据库连接访问,可以直接返回一个IEnumerable<ToDo>的结果集,如果只需要获取SqL语句只需要:
string querystr = repository.Query()
.Select(e => e.Id, e => e.Task, e => e.CreatedDate)
.Where(e => e.IsCompleted == false)
.Sql();
querystr结果为:"SELECT [dbo].[ToDo].[Id] , [dbo].[ToDo].[Task], [dbo].[ToDo].[CreatedDate]
FROM [dbo].[ToDo]
WHERE ([dbo].[ToDo].[IsCompleted] = 0)"
三、关于SqlRepoEx性能,在原生的SqlRepo有对其进行对比测试:
比较库
1、SqlRepo
2、Dapper
3、EF Core 2.0
测试环境
1、每个测试都运行在包含5万条记录的SQL数据库上。测试运行105次,前5个测试被忽略,以支持JIT和任何动态IL。
2、测试机器是一个在i7 7700 k上运行4个核心的VM。最后一次是在2018年3月4日。
测试:选择返回所有记录(Select All Records)
库 | 最好结果(ms) | 总时间 |
---|---|---|
Dapper | 51.03ms | 6250.34ms |
EF Core | 163.11ms | 19874.59ms |
SqlRepo | 50.34ms | 6260.17ms |
测试:选择一条记录(Select TOP 1)
库 | 最好结果(ms) | 总时间 |
---|---|---|
Dapper | 0.3ms | 73.73ms |
EF Core | 0.66ms | 42.85ms |
SqlRepo | 0.35ms | 40.16ms |
测试:Select TOP 5000
库 | 最好结果(ms) | 总时间 |
---|---|---|
Dapper | 3.91ms | 533ms |
EF Core | 9.81ms | 2082.93ms |
SqlRepo | 4ms | 526.43ms |
测试:动态数据测试
库 | 最好结果(ms) | 总时间 |
---|---|---|
Dapper | 13.16ms | 2382.85ms |
EF Core | 39.93ms | 5106.13ms |
SqlRepo | 12.74ms | 2284.85ms |
具体测试源码见 https://github.com/SqlRepo/Benchmarks
轻量ORM-SqlRepoEx (一)SqlRepoEx介绍的更多相关文章
- SqlSugar轻量ORM
蓝灯软件数据股份有限公司项目,代码开源. SqlSugar是一款轻量级的MSSQL ORM ,除了具有媲美ADO的性能外还具有和EF相似简单易用的语法. 学习列表 0.功能更新 1.SqlSuga ...
- Dapper.NET——轻量ORM
Dapper.NET使用 http://www.cnblogs.com/yankliu-vip/p/4182892.html 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Da ...
- Dapper.NET—轻量ORM
Dapper.NET使用 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Dapper(4.0)为例. 2.1 在数据库中建立几张表. 2.2实体类. 3.使用方法 3.1 一 ...
- C# Dapper 轻量ORM调试对SQLServer
Dapper简介 Dapper只有一个代码文件,完全开源,你可以放在项目里的任何位置,来实现数据到对象的ORM操作,体积小速度快. 使用ORM的好处是增.删.改很快,不用自己写sql,因为这都是重复技 ...
- Linux桌面最轻量的Dock之Plank介绍
官方的文档描述 Plank 是“这个星球上最简洁的 dock”.该项目的目的就是仅提供一个 dock 需要的功能,尽管这是很基础的一个库,却可以被扩展,创造其他的含更多高级功能的 dock 程序. 这 ...
- 轻量ORM-SqlRepoEx (九)与Dapper共舞
Dapper就另一个轻量ORM,Dapper及其扩展解决了数据访问端的大部门问题,提供了如数据事务管理.缓存等支持.SqlRepoEx的重点解决了Lambda转换成SQL语句,使SQL使用强类型编写, ...
- 轻量ORM-SqlRepoEx (二)初始化SqlRepoEx
一.SqlRepoEx引用 暂时没放至nuget上,可以直接到https://github.com/AzThinker/SqlRepoEx下载源码,编译引用. (一).静态引用 1.需引用以下dll在 ...
- 轻量ORM-SqlRepoEx介绍
轻量级 ORM-SqlRepoEx 介绍 SqlRepoEx是 .Net平台下兼容.NET Standard 2.0人一个轻型的ORM.解决了Lambda转Sql语句这一难题,SqlRepoEx使用的 ...
- OWIN轻量型框架介绍
OWIN轻量型框架介绍 阅读目录 引言 框架的特色 如何启动 各项功能 静态路由的3种写法 伪静态路由的支持 处理Form表单提交的文件 流式处理Post请求的数据 多种请求类型自动识别 响应处理 请 ...
- 轻量型ORM框架Dapper的使用
在真实的项目开发中,可能有些人比较喜欢写SQL语句,但是对于EF这种ORM框架比较排斥,那么轻量型的Dapper就是一个不错的选择,即让你写sql语句了,有进行了关系对象映射.其实对于EF吧,我说下我 ...
随机推荐
- Spring JdbcTemplate 使用总结
1.查询Object public Classify queryClassifById(int id){ String sql="select * from t_classify where ...
- Redis的Publish/Subscribe
Publish/Subscribe 从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个key值上进行了消息发布 ...
- SGI STL红黑树中迭代器的边界值分析
前言 一段程序最容易出错的就是在判断或者是情况分类的边界地方,所以,应该对于许多判断或者是情况分类的边界要格外的注意.下面,就分析下STL中红黑树的迭代器的各种边界情况.(注意:分析中STL使用的版本 ...
- 重构指南 - 封装集合(Encapsulate Collection)
封装就是将相关的方法或者属性抽象成为一个对象. 封装的意义: 对外隐藏内部实现,接口不变,内部实现自由修改. 只返回需要的数据和方法. 提供一种方式防止数据被修改. 更好的代码复用. 当一个类的属性类 ...
- java使用commons-fileupload进行文件上传
java中使用文件上传时需要使用特定的类库,这里使用commons-files类库进行文件上传,在http://commons.apache.org/proper/commons-fileupload ...
- Java入门到精通——调错篇之EasyUI+SpringMVC Form表单提交到Contorller中文字出现乱码
一.错误现象. 界面Post提交到Contorller的时候在Contorller中出现乱码. 二.问题解决. 在Web.xml下加入以下代码就可以解决. <filter> <fil ...
- SharePoint 2013 - REST Service
0. SharePoint 2013使用_api来标识出 REST SERVICE,REST Service其实是 client.svc web service的一部分,但为了简化 REST URI的 ...
- DispatchAction和ForwardAction
添加功能的步骤:做页面——编写DAO类中的方法——编写和配置action. 如果多个action 使用一个formbean,这种事儿多发生在统一模块中,就可以用一个Action集中处理多个操作,而不要 ...
- DB2数据库创建数据库操作过程
/* author simon */ 例:数据库:NCDB2用户 :DB2ADMIN/DB2ADMIN备份库路径:D:/bank 一.恢复数据库1.启动数据库运行->db2cmd->db2 ...
- Windows漏洞利用技术概述
Windows漏洞利用技术总结 1. 前言 本文是我对漏洞利用技术的学习总结,也是自己践行QAD (Questions.Answer.Discussions)的一次实践.本文通过阅读几位大牛的文章.演 ...