Dapper.Lite 扩展
最近重构并精简了Dapper.Lite,然后把不依赖Dapper的版本LiteSql也重构了一下,和Dapper.Lite保持一致。感觉这两款ORM基本完工,自荐一下。
.NET的ORM虽多,堪用的不多,何为堪用,EF是官方的,质量高,堪用。Dapper用户量大,现在BUG基本改的差不多了,也基本不增加新功能,就不会引入新BUG。SqlSugar和FreeSql有一定的用户量,发现BUG修复BUG,也算堪用。其它的,就只能自己用了(除EF、Dapper的国外的,也有不错的,似乎国内用的少)。
大家做的项目有没有上限?做三流项目还是一流项目?做三流项目的话,什么ORM都可以试一试的。做一流项目,EF不会影响项目的上限,Dapper也不会影响项目的上限,ADO.NET也不会影响项目的上限只是写起来费事了。SqlSugar和FreeSql会不会影响项目的上限?用国产ORM做的项目能否和Java项目拼一拼?MyBatis虽然又臭又长,但肯定翻不了车,也不会影响项目的上限。
何为项目的上限?极限性能?稳定可靠?我就想狂怼mysql的时候,几个月不写一条error日志。放在服务器上的服务,上次error是10月2日的和数据库操作无关,上上次error是9月18日的,就一条error原因已知。
写了一款Dapper.Lite,自己用,并分享给大家。用户很重要,最近几个月仅一个加群找我的用户,就帮我修复了一个bug,并提了一条功能上的建议。所以,用户量少,也可以说限制了Dapper.Lite的上限。
Dapper.Lite是一款Dapper扩展,单表查询和SQL拼接查询条件支持Lambda表达式,旨在为大家提供一款简单易用、稳定可靠的ORM,支持Oracle、MSSQL、MySQL、PostgreSQL、SQLite、Access、ClickHouse等数据库。照着抄一份Provider改改,写100多行代码,就可以支持国产数据库或其它数据库。
它的特色有:
- 单表查询支持Lambda
就一个单表查询还写SQL有点麻烦,我也不想写,所以做了Lambda支持。
List<SysUser> list = session.Queryable<SysUser>().Where(t => t.Id <= 20 && t.Remark.Contains("测试")).ToList();
这次重构,连表查询、子查询等复杂功能都删除了。你可以去看看SqlSugar和FreeSql等的源码,每个数据库的实现细节是不一样的,很复杂。复杂可能会引入bug,增加新功能可能会引入bug,就算没有bug,你不会用,看文档不仔细,也可能会写出bug,船大难掉头,打补丁可能会带来妥协的语法,CopyNew就是这么来的,不然FreeSql的Lambda为什么不跟SqlSugar写法一样呢?总有一个是最佳。
- 以SQL为主,无论何种数据库,都是下面的写法,这是最常用的用法
前缀有的数据库是@符有的是:符,但ClickHouse数据库有点不一样,写起来麻烦一点,这里统一了。
session的意思是一次数据库会话,主要是为了数据库事务,如果没有事务,可以直接db.Sql
List<SysUser> list = session.Sql("select * from sys_user where id <= @Id and remark like @Remark", 20, "%测试%"); //参数按顺序来,一两个也不容易眼花
或
List<SysUser> list = session.Sql("select * from sys_user where id <= @Id and remark like @Remark", new { Id = 20, Remark = "%345%" }); //参数多的话就这么写吧
接着拼接:
.Append("and name like @Name", "%测试%");
- SQL拼接查询条件支持Lambda表达式
既然写SQL了,那也无法使用强类型了,表名改了SQL要改。Where条件这样写比SQL方便一点点。有的orm在字符串中使用{nameof(xxx)},但有点丑,写起来也费事,字符串里都是大括号不好阅读。
List<KpTask> kpTaskList = await session
.Sql<KpTask>(@"
select t.*, m.model_start as ModelStart, m.model_end as ModelEnd
from kp_task t
left join kp_model m on m.model_id=t.model_id")
.Where(t => t.IsDel == 0)
.Where(t => new int?[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }.Contains(t.OpeType))
.Where<KpModel>(m => m.ModelStart <= DateTime.Now && DateTime.Now <= m.ModelEnd)
.ToListAsync();
Dapper.Lite有没有BUG?有没有设计缺陷?可能会有,但暂时不知道,目前主要是我自己用,我的使用场景不够丰富。5000多行代码,扫一眼就能发现有没有问题。
大道至简,Dapper.Lite的目标是简单易用,稳定可靠。
Dapper没有扩展并不方便,支持Lambda表达式的扩展,有SqlSugar方便吗?没有!能保证没有BUG吗,还在维护吗?BUG谁修?不支持Lambda表达式的扩展,也不方便。如今似乎Dapper相关的博客少,可能用的人也少。只要Java的MyBatis还活着,.net就不能只有EF、SqlSugar这类选项。Dapper相当于Java的JdbcTemplate,有的项目就是直接用的JdbcTemplate。
正经项目能用EF当然是EF,但如果你对EF有迟疑,对SqlSugar也犹豫,或者你喜欢写SQL,打算用Dapper,不妨试试Dapper.Lite,直接NuGet下载安装,如果有问题,至少Dapper.Lite的源码是你能hold住的。
有用户没有使用Dapper.Lite而使用了LiteSql操作Access,说是Dapper操作Access也有点问题,原因他也忘了。所以最近LiteSql也重构更新了一下,和Dapper.Lite接口是一样的。
如果Dapper.Lite用户数量多一些的时候,如果没有出现难以修复的致命问题,如果不需要再重构,如果接口没什么变化,也不用增加什么新接口,它就达到了我认为的优秀,它的目标不是功能强大,它的目标是我做项目的时候,不想因为orm的问题浪费时间。
(主要是自己做下宣传,增加一点用户,有助于改进和质量,不想又因为ORM引起争论,也非同类ORM,多一种选择。如今写orm的话题显得比较low,不过你们写的技术,很多我都用不到,但不管什么项目,几乎都要用到orm)
Dapper.Lite 扩展的更多相关文章
- 封装自己的dapper lambda扩展-设计篇
前言 昨天开源了业务业余时间自己封装的dapper lambda扩展,同时写了篇博文<编写自己的dapper lambda扩展-使用篇>简单的介绍了下其使用,今天将分享下它的设计思路 链式 ...
- 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生
[转].NET(C#):浅谈程序集清单资源和RESX资源 目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...
- Dapper的扩展这个你知道嘛?
之前写的ORM对比文章中,我选Dapper作为底层ADO的基础访问框架后,我对此再次进行进一步的深入研究,发现里面还有延伸了一些好用的扩展方法和特性,那我便简单的跟大家说一下特性标签. 一.Table ...
- 基于轻量级ORM框架Dapper的扩展说明
这里简单的介绍一下本人基于Dapper作的一些简单的扩展,供大家参考. 为何要使用这款框架,相信大家看到下面排名就清楚了 其实在各大网站上,我们大概都会看到这样的一个对比效果图,在超过500次poco ...
- 编写自己的dapper lambda扩展-使用篇
前言 这是针对dapper的一个扩展,支持lambda表达式的写法,链式风格让开发者使用起来更加优雅.直观.现在暂时只有MsSql的扩展,也没有实现事务的写法,将会在后续的版本补充. 这是个人业余的开 ...
- .NETCore Sqlserver下对Dapper的扩展支持
这里我们自定义一个IServiceCollection的扩展,例如下面我的扩展 services.AddDapperContext(dapperoptions => { dapperoption ...
- ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法
一.前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类帮我们实现对于数据库的快速访问,后来,ORM(Object Relatio ...
- 开源Dapper的Lambda扩展-Sikiro.Dapper.Extension V2.0
前言 去年我在业余时间,自己整了一套dapper的lambda表达式的封装,原本是作为了一个个人的娱乐项目,当时也只支持了Sql Server数据库.随之开源后,有不少朋友也对此做了试用,也对我这个项 ...
- NET Core 实战 Dapper 扩展数据访问
NET Core 实战:基于 Dapper 扩展你的数据访问方法 一.前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类帮我们实 ...
- .NET MVC5+ Dapper+扩展+AutoFac自动注入实现
1.首先创建一个MVC项目 定义Model 层 view 层 index.cshtml 控制器层Controllers等文件 2.在线安装或者引用dapper 以及扩展相关包 同时Autofac ...
随机推荐
- shell: logging + readlog
logging #!/bin/bash # a small tool for logging sommething # # 1. read your input # 2. save to logs f ...
- mysql-workbench-community报错解决办法
输入以下命令: sudo apt-get -f install 参考链接:https://www.jianshu.com/p/767c9a29b403
- linux vim 无权限保存解决办法
通常在vim编辑文件时往往会忘记文件权限问题, 在wq保存时发现权限不足,这时候输入以下命令解决: w! sudo tee % 命令解析: w! {cmd} 指示 保存时执行额外命令: tee 用于将 ...
- 手写 Vuex4 源码
本文首发于掘金,未经许可禁止转载 Vuex4 是 Vue 的状态管理工具,Vuex 和单纯的全局对象有以下两点不同: Vuex 的状态存储是响应式的 不能直接改变 store 中的状态.改变 stor ...
- 浅析 GlusterFS 与 JuiceFS 的架构异同
在进行分布式文件存储解决方案的选型时,GlusterFS 无疑是一个不可忽视的考虑对象.作为一款开源的软件定义分布式存储解决方案,GlusterFS 能够在单个集群中支持高达 PiB 级别的数据存储. ...
- Pytorch构建超分辨率模型——常用模块
Import required libraries: import torch import torch.nn as nn import torch.optim as optim from torch ...
- 文心一言 VS 讯飞星火 VS chatgpt (85)-- 算法导论8.2 2题
二.用go语言,试证明 COUNTING-SORT 是稳定的. 文心一言: 要证明 COUNTING-SORT 是稳定的,我们需要证明在排序过程中,具有相同值的元素在排序后仍保持其原始的相对顺序.CO ...
- Web服务器部署上线的踩坑流程回顾与知新
5月份时曾部署上线了C++的Web服务器,温故而知新,本篇文章梳理总结一下部署流程知识: 最初的解决方案:https://blog.csdn.net/BinBinCome/article/detail ...
- AutoEmbedding论文阅读笔记
问题背景 目前推荐系统中, 在特征维度上低频特征和高频特征的维度是通过遍历mask特征获得到的auc衰减衡量特征对模型的重要度来决定的. 如果想提升模型效果, 在field层面上需要减少进行基于经验的 ...
- DesignPattern-part3
title: "modern C++ DesignPattern-Part3" date: 2018-04-12T19:08:49+08:00 lastmod: 2018-04-1 ...