C#开源、简单易用的Dapper扩展类库 - Dommel

项目特性

  • Dommel 使用 IDbConnection 接口上的扩展方法为 CRUD 操作提供了便捷的 API。

  • Dommel 能够根据你的 POCO 实体自动生成相应的 SQL 查询语句。这大大减少了手动编写 SQL 代码的工作量,并提高了代码的可读性和可维护性。

  • Dommel 支持 LINQ 表达式,这些表达式会被翻译成 SQL 表达式并执行。这使得开发者能够使用更高级、更灵活的查询语法。

  • Dommel 使用 Dapper 作为底层库来执行查询和对象映射。

Dapper

Dapper是一个简单的.NET对象映射器,在速度方面具有"King of Micro ORM"的头衔,几乎与使用原始的ADO.NET数据读取器一样快。ORM是一个对象关系映射器,它负责数据库和编程语言之间的映射。Dapper通过扩展IDbConnection提供一些有用的扩展方法去查询您的数据库。

  • GitHub地址:https://github.com/DapperLib/Dapper

项目源代码

项目使用

以下是Dommel的简单的CRUD操作,更多实用且复杂操作可以前往项目源码地址查看(文末附带项目源码地址)。

安装Dommel包

定义Product实体类

public class Product
{public int Id { get; set; }public string Name { get; set; }public int InStock { get; set; }public DateTime Created { get; set; }
}

数据新增

var product = new Product { Name = "Awesome bike", InStock = 4 };
var id = await connection.InsertAsync(product);

数据删除

var product = await connection.GetAsync<Product>(1);
await connection.DeleteAsync(product);

数据修改

var product = await connection.GetAsync<Product>(1);
product.Name = "New name";
await connection.UpdateAsync(product);

数据查询

var product = await connection.GetAsync<Product>(1);
var products1 = await connection.GetAllAsync<Product>();
var products2 = await connection.SelectAsync<Product>(p => p.Name == "Awesome bike" && p.Created < new DateTime(2014, 12, 31) && p.InStock > 5);
var products3 = await connection.SelectAsync<Product>(p => p.Name.Contains("bike"));
var products4 = await connection.SelectAsync<Product>(p => p.Name.StartsWith("bike"));
var products5 = await connection.SelectAsync<Product>(p => p.Name.EndsWith("bike"));

文章转载自:追逐时光者

原文链接:https://www.cnblogs.com/Can-daydayup/p/18317443

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1487049.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件

目录 ​编辑 前言 系统调用 open 参数flags 参数mode write 追加方式 read close 文件描述符 打开多个文件并观察其文件描述符 C语言文件操作 理解一切皆文件 理解open操作 前言 各类语言的文件操作其实是对系统调用的封装 我们经常说&#xff0c;创建一个文件&a…

【Linux】:自定义shell(简易版)

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家带来一期自定义shell&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数据结构专栏…

虚拟现实和增强现实技术系列—Expressive Talking Avatars

文章目录 1. 概述2. 背景介绍3. 数据集3.1 设计标准3.2 数据采集 4. 方法4.1 概述4.2 架构4.3 目标函数 5. 实验评测5.1 用户研究5.2 我们方法的结果5.3 比较与消融研究 1. 概述 支持远程协作者之间的交互和沟通。然而&#xff0c;明确的表达是出了名的难以创建&#xff0c;主…

SSRF中伪协议学习

SSRF常用的伪协议 file:// 从文件系统中获取文件内容,如file:///etc/passwd dict:// 字典服务协议,访问字典资源,如 dict:///ip:6739/info: ftp:// 可用于网络端口扫描 sftp:// SSH文件传输协议或安全文件传输协议 ldap://轻量级目录访问协议 tftp:// 简单文件传输协议 gopher…

媒体邀约专访与群访的区别?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体邀约中的专访与群访在多个方面存在显著差异&#xff0c;以下是对这两种采访方式的详细比较&#xff1a; 一、定义与形式 专访&#xff1a; 定义&#xff1a;专访是指由媒体记者对单…

iOS 开发包管理之CocoaPods

CocoaPods&#xff08;Objective-C 时期&#xff0c;支持Objective-C和swift&#xff09;&#xff0c;CocoaPods下载第三方库源代码后会将其编译成静态库.a 文件 或动态库框架.framework 文件 的形式&#xff0c;并将它们添加到项目中&#xff0c;建立依赖关系&#xff0c;这种…

CPU与IO设备交互

距离cpu比较近的总线速度快&#xff0c;价格昂贵一些&#xff0c;根据重要程度选择总线&#xff0c;cpu不是通过总线直接和io设备相连接的&#xff0c;而是通过设备控制器进行连接的&#xff0c;暂时只需要关注cpu和设备控制器的直接进行的操作。 通过判断状态寄存器是否usy或者…

数据融合工具(15)线层、面层打折自动检测修复

一、内容导读 一个工具解决包括极小角在内的线层、面层要素的打折数据质量问题…… 小编提供了很多功能强大&#xff0c;应用场景广发的数据融合辅助工具集&#xff0c;能高效解决数据融合需要…… 数据融合工具&#xff08;1&#xff09;指定路径下同名图层合并 数据融合工具…

Linux云计算 |【第一阶段】SERVICES-DAY6

主要内容&#xff1a; Linux容器基础、Linux容器管理、podman命令行、管理容器进阶 实操前骤&#xff1a;安装 RHEL8.2 虚拟机 1.选择软件包&#xff1a;rhel-8.2-x86-dvd.iso&#xff1b; 2.内存2048M&#xff1b; 3.时区选择亚洲-上海&#xff0c;带GUI的服务器&#xff1b…

后端接口返回图片,前端的处理方法

接口返回如下图所示&#xff1a; 打印结果如下图所示&#xff1a; 出现问题的原因的axios默认返回的是json文本形式&#xff0c;二进制图片数据被强制转换成了 json 文本形式 处理方法&#xff1a; 首先&#xff0c;在axios中&#xff0c;将responseType默认返回数据类型json…

Python轻量级邮件发送库库之salmon使用详解

概要 电子邮件是现代通信的基础,在许多应用程序中,自动发送电子邮件是一个常见需求。salmon-mail 是一个基于 Python 的轻量级邮件发送库,它提供了简洁且强大的 API,用于处理电子邮件的发送和管理。本文将详细介绍 salmon-mail 库,包括其安装方法、主要特性、基本和高级功…

React 学习——行内样式、外部样式、动态样式

三种样式的写法 import "./index.css"; //同级目录下的样式文件 function App() {const styleCol {color: green,fontSize: 40px}// 动态样式const isBlock false;return (<div className"App">{/* 行内样式 */}<span style{{color:red,fontSiz…

科技引领水资源管理新篇章:深入剖析智慧水利解决方案,展现其在提升水资源利用效率、优化水环境管理方面的创新实践

本文关键词&#xff1a;智慧水利、智慧水利工程、智慧水利发展前景、智慧水利技术、智慧水利信息化系统、智慧水利解决方案、数字水利和智慧水利、数字水利工程、数字水利建设、数字水利概念、人水和协、智慧水库、智慧水库管理平台、智慧水库建设方案、智慧水库解决方案、智慧…

破解网络奥秘:一图胜千言,TCP重传、滑动窗口、流量与拥塞控制全解析

引言 TCP 是一个非常复杂且伟大的协议&#xff0c;它通过许多机制来确保传输的可靠性。为了实现这一目标&#xff0c;TCP需要处理各种问题&#xff0c;比如数据损坏、丢包、重复数据以及分片顺序混乱等。如果这些问题得不到解决&#xff0c;可靠传输就无从谈起。 众所周知&am…

C++系列-list的模拟实现

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 构造函数生成 template<class T>struct ListNode{ListNode<T>* _next;ListNode<T>* _prev;T _data;ListNode(const T& data T()):_next(nullptr),_prev…

在 Android 上实现语音命令识别:详细指南

在 Android 上实现语音命令识别:详细指南 语音命令识别在现代 Android 应用中变得越来越普遍。它允许用户通过自然语言与设备进行交互,从而提升用户体验。本文将详细介绍如何在 Android 上实现语音命令识别,包括基本实现、带有占位槽位的命令处理,以及相关的配置和调试步骤…

Linux嵌入式学习——数据结构——概念和Seqlist

数据结构 相互之间存在一种或多种特定关系的数据元素的集合。 逻辑结构 集合&#xff0c;所有数据在同一个集合中&#xff0c;关系平等。 线性&#xff0c;数据和数据之间是一对一的关系。数组就是线性表的一种。 树&#xff0c; 一对多 图&#xff0c;多对多 …

压测实操--kafka broker压测方案

作者&#xff1a;九月 环境信息&#xff1a; 操作系统centos7.9&#xff0c;kafka版本为hdp集群中的2.0版本。 kafka broker参数 num.replica.fetchers&#xff1a;副本抓取的相应参数&#xff0c;如果发生ISR频繁进出的情况或follower无法追上leader的情况则适当增加该值&…

Java---String类

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 &#xff0c;Java 欢迎大家访问~ 创作不易&#xff0c;大佬们点赞鼓励下吧~ 前言 在C语言中已经涉及到字符串了…

[前端]解决Iframe即使设置高度100%,但还是显示滚动条scrollbar的问题

前言 好烦,你看看这两个重复的滚动条. 一个是来自iframe,另一个来自父级的div(overflow: auto;) 我已经在css中设置了iframe的height: 100%;border: none;,但无论如何还是显示出了父级的scrollbar 解决 将iframe的display: block;即可. 或者vertical-align: bottom;