首页 程序笔记 Dapper.Lite 扩展

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多行代码,就可以支持国产数据库或其它数据库。

它的特色有:

  1. 单表查询支持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写法一样呢?总有一个是最佳。

  1. 以SQL为主,无论何种数据库,都是下面的写法,这是最常用的用法
    前缀有的数据库是@符有的是:符,但ClickHouse数据库有点不一样,写起来麻烦一点,这里统一了。
    session的意思是一次数据库会话,主要是为了数据库事务,如果没有事务,可以直接db.Sql
List<SysUser> list = session.Sql("select * from sys_user where id <= @Id and remark like @Remark", 20, "%测试%").ToList(); //参数按顺序来,一两个也不容易眼花

List<SysUser> list = session.Sql("select * from sys_user where id <= @Id and remark like @Remark", new { Id = 20, Remark = "%345%" }).ToList(); //参数多的话就这么写吧

接着拼接:

.Append("and name like @Name", "%测试%"); 
  1. 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的问题浪费时间。

站心网

最近重构并精简了Dapper.Lite,然后把不依赖Dapper的版本LiteSql也重构了一下,和Dapper.Lite保持一致。感..

为您推荐

基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体之基础

LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼.文档地址:https://liningit.github.io/LnskyDB/开源地址:https://github.com/liningit/Ln..

使用System.Linq.Dynamic.Core扩展库动态构建 LINQ 查询

System.Linq.Dynamic.Core 是一个扩展库,用于在运行时动态构建 LINQ 查询,支持字符串形式的表达式解析和动态查询操作。它是 .NET 的一个强大工具,适合处理需要灵活定义查询逻辑的场景,例如动态过滤、排序、投影..

.Net Core中Dapper的使用详解

1.安装Dapper这里直接使用Nuget安装。安装版本是1.50.5安装完成之后,发现Nuget下已经有了Dapper。2.创建DapperHelper接下来创建一个DapperHelper帮助类,来进行读取数据库连接字符串,打开数据库等操作。public cla..

扩展插件 Resharper

Resharper下载地址提取码:96wxReSharper是一个JetBrains公司出品的著名的代码生成工具。其能帮助Microsoft Visual Studio成为一个更佳的IDE,它包括一系列丰富的能大大增加C#和Visual Basic .net开发者生产力的特征..

Dapper使用教程

假如你喜欢原生的Sql语句,又喜欢ORM的简单,那你一定会喜欢上Dapper这款ROM。Dapper的优势: 1、Dapper是一个轻型的ORM类。代码就一个SqlMapper.cs文件,编译后就40K的一个很小的Dll. 2、Dapper很快。Dapper的速度..

轻量级ORM框架Dapper用法

Dapper 是一个轻量级的 ORM 框架,它可以简化与数据库的交互。Dapper 使用 SQL 查询来访问数据库,并将查询结果映射到对象。Dapper 的优点轻量级:Dapper 的代码量非常小,非常适合小型项目。灵活:Dapper 提供了各..

基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体基础

LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼.文档地址:https://liningit.github.io/LnskyDB/开源地址:https://github.com/liningit/Ln..

如何开发VSCode插件

要开发 VSCode 插件,你需要遵循以下步骤:安装 Node.js:确保你的计算机上安装了 Node.js。你可以从官方网站 https://nodejs.org/ 下载和安装最新版本。安装 Yeoman 和 VSCode 插件生成器:Yeoman 是一个用于生成项..

基于C#开发的socket扩展库SuperSocket用法

SuperSocket 是一个开源的 C# 网络库,用于开发网络应用程序。它提供 TCP、UDP、HTTP、HTTPS、WebSocket 等协议的支持,并提供了丰富的功能,如多连接、异步 I/O、数据包处理、流量控制等。SuperSocket 的优点如下:..

你如何设计一个可扩展的.NET应用程序架构?请描述你在这方面的思考过程和实践经验。

设计可扩展的.NET应用程序架构是为了满足应用程序在需求增长和负载增加时的可扩展性和性能要求。下面是我在这方面的思考过程和实践经验:需求分析:首先,我会进行需求分析,了解应用程序的功能需求和预期的负载。这..

C#中如何为string类添加扩展的方法

在C#中,提供了可以给类增加扩展方法的特性,扩展方法后,只需要通过[对象名].[方法名]就可以调用扩展的方法,调用上非常简洁清晰,下面以string类为例,介绍一下扩展方法。示例代码如下:public static class Utili..

安装和配置适用于 WHMCS 的 DirectAdmin 扩展

您是否安装并配置了 DirectAdmin,但缺少与 WHMCS 的集成? DirectAdmin Extended For WHMCS 为您提供配置 Web 托管帐户并管理它们时所需的自动化。客户无需离开您的网站,因为每个常用的 DirectAdmin 功能都可以从 ..

如何开发Visual Studio扩展程序插件?

要开发 Visual Studio 的扩展程序插件,你可以使用 Visual Studio 的扩展开发工具集。以下是一般的步骤:安装 Visual Studio SDK:在安装 Visual Studio 时,确保勾选了“Visual Studio 扩展开发人员工具&rdquo..

.NET轻量级ORM框架Dapper.NET使用教程

Dapper.NET 是一个轻量级的对象关系映射(ORM)库,旨在为 .NET 开发人员提供高效、简洁的数据访问解决方案。与其他 ORM 框架相比,Dapper 专注于提供快速的数据库访问,同时保持简单性和性能。以下是 Dapper 的一些..

.NET轻量级ORM框架Dapper.NET高级应用示例

Dapper是一个轻量级的ORM(对象关系映射)库,用于.NET应用程序与数据库之间的数据访问。它允许你使用SQL查询来执行数据库操作,而不需要复杂的映射配置。在这篇文章中,我将为您提供Dapper的高级应用功能示例,每个..

使用 .NET 为 Microsoft AI 构建可扩展网关

Microsoft AI 团队构建全面的内容、服务、平台和技术,帮助消费者在任何地方的任何设备上获取所需的信息,并帮助企业改善客户和员工体验。我们的团队为 Bing、Copilot、广告、地图和 Edge 等多种体验提供支持,通过 ..

全站任意位置调用二级栏目 三级栏目 或全部栏目可以扩展到无限目录

项目需要一个列表页显示全部二级栏目和二级栏目下的三级分类经过琢磨分享下吧 显示全站栏目代码:我只写到了三级栏目有需要的继续扩展即可。 从此以后什么弹出栏目选择二级三级四级五级分类不再是问题了,搜索了论坛..

发表回复

返回顶部