.NET6之MiniAPI(二十五):Dapper

注:如果你使用Dapper一段时间了,这篇你可以跳过去了

在第十二篇中,我们聊过官方的ORM——EntityFramework,它可以把SQL细节都隐藏,这对于一些标准化的关系数据库项目非常便捷。今天,介绍另外一个流行的ORM——Dapper,Dapper是通过扩展IDbConnection方法来达到对数据的处理的,特点是灵活,高效。

还是通过项目看看Dapper的使用。首先安装两个NuGet包,我们还是使用之前的Exam项目的表来说明Dapper使用,库是SQL Server。

安装Dapper和SqlClient:

Install-Package Dapper

Install-Package Microsoft.Data.SqlClient

下面是对Question进行增删改查

using Dapper;
using Microsoft.Data.SqlClient;var builder = WebApplication.CreateBuilder(args);
builder.Services.AddScoped<IQuestionService, QuestionService>();
var app = builder.Build();app.MapPost("/question", async (IQuestionService questionService, QuestionModel question) =>
{return await questionService.AddQuestionAsync(question);
});app.MapPut("/question", async (IQuestionService questionService, QuestionModel question) =>
{return await questionService.ModifyQuestionAsync(question);
});app.MapGet("/question/{id}", async (IQuestionService questionService, int id) =>
{return await questionService.GetQuestionAsync(id);});app.MapDelete("/question/{id}", async (IQuestionService questionService, int id) =>
{return await questionService.DeleteQuestionAsync(id);
});app.Run();public interface IQuestionService
{Task<QuestionModel> GetQuestionAsync(int id);Task<bool> AddQuestionAsync(QuestionModel question);Task<bool> DeleteQuestionAsync(int id);Task<bool> ModifyQuestionAsync(QuestionModel question);
}
public class QuestionService : IQuestionService
{private readonly SqlConnection _connection;public QuestionService(IConfiguration configuration){var connectionString = configuration.GetConnectionString("ExamDatabase");_connection = new SqlConnection(connectionString);}public async Task<bool> AddQuestionAsync(QuestionModel question){var sql = @"INSERT INTO [Questions]([Question],[Score],[QuestionTypeID],[SujectTypeID])VALUES(@Question,@Score,@QuestionTypeID,@SujectTypeID)";return (await _connection.ExecuteAsync(sql, question)) > 0;}public async Task<bool> DeleteQuestionAsync(int id){var sql = @"delete from questions where id=@id";return (await _connection.ExecuteAsync(sql, new { id })) > 0;}public async Task<QuestionModel> GetQuestionAsync(int id){var sql = @"select * from questions where id=@id";return await _connection.QuerySingleAsync<QuestionModel>(sql, new { id });}public async Task<bool> ModifyQuestionAsync(QuestionModel question){var sql = @"UPDATE [dbo].[Questions]SET [Question] = @Question,[Score] = @Score,[QuestionTypeID] = @QuestionTypeID,[SujectTypeID] = @SujectTypeIDWHERE ID=@ID";return (await _connection.ExecuteAsync(sql, question)) > 0;}
}

通过上面事例,可以看到Dapper通过扩展IDbConnection的扩展方法来提供功能,基本上查询用Query<T>(sql,Param,...),增删改用Execute(sql,T,...),Dapper的方便之处是T全部是自运映射到sql中的参数的,这样就能做到sql我们可以灵活且更高效语法编写,参数可以方便的进出sql,达到一个平衡点。如下图示:

1419ff14eca0eae5afe0daf0b603620f.png

关于更丰富多彩的Dapper使用,详见Github仓库说明文档:https://github.com/DapperLib/Dapper

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动端web开发整理

/* 移动端定义字体的代码 */body {   font-family: "Helvetica Neue", Helvetica; } ios端触摸时&#xff0c;会出现一个半透明灰色遮罩  如果想要禁用&#xff0c;可设置-webkit-tap-highlight-color的alpha值为0 body{-webkit-tap-highlight-color: rgba(0,0,…

LeetCode Implement Queue using Stacks (数据结构)

题意&#xff1a; 用栈来实现队列。 思路&#xff1a; 一个栈是不够的&#xff0c;至少要两个。 &#xff08;1&#xff09;插入。永远只插入到stack1中&#xff08;插到栈顶&#xff09;。 &#xff08;2&#xff09;弹出。如果stack2不为空&#xff0c;直接弹出stack2的栈顶&…

C++之STL之priority_queue

1、priority_queue介绍 priority_queue 是优先队列 模板声明带有三个参数,priority_queue<Type, Container, Functional> Type为数据类型,Container为保存数据的容器,Functional为元素比较方式 Container必须是用数组实现的容器,如 vector, deque不能用list, STL里面…

直角三角形知道两边求角度_每日一讲:解直角三角形(3.21)

考点一、直角三角形的性质 1、直角三角形的两个锐角互余&#xff1a;可表示如下&#xff1a;∠C90∠A∠B902、在直角三角形中&#xff0c;30角所对的直角边等于斜边的一半。3、直角三角形斜边上的中线等于斜边的一半4、勾股定理&#xff1a; 如果直角三角形的两直角边长分别为…

用VBA得到EXCEL表格中的行数和列数

用VBA得到EXCEL表格中的行数和列数 每种方法中上面的是Excel的行数&#xff0c;下面的是Excel的列数。 方法1: ActiveSheet.UsedRange.Rows.Count ActiveSheet.UsedRange.Columns.Count 缺点&#xff1a;有时可能会比实际数大一些&#xff0c;原因是如果你把最后几行&#xff0…

Javascript屏蔽鼠标的右键的两种方法。

方法一&#xff1a;利用鼠标button的键值 <script language"javascript">function blockright(oEvent) {var oDiv document.getElementById("display");if (window.event) oEvent window.event; //处理兼容性&#xff0c;获得事件对象if (oEvent.b…

Blazor University (4)组件 — 单向绑定

原文链接&#xff1a;https://blazor-university.com/components/one-way-binding/单向绑定源代码[1]此时我们在页面内显示了一个组件&#xff0c;但内容是静态的。我们真正想要的是能够动态输出内容。如果我们更改 /Components/MyFirstComponent.razor 的内容&#xff0c;我们…

Java Web项目开发流程

2019独角兽企业重金招聘Python工程师标准>>> 1.Web项目开发流程图解 2.Web项目开发的细节&#xff08;转载&#xff09; 任何一个项目或者系统开发之前都需要定制一个开发约定和规则&#xff0c;这样有利于项目的整体风格统一、代码维护和扩展。由于Web项目开发的分…

OpenGL中shader使用

引自&#xff1a;http://blog.csdn.net/wl_soft50/article/details/7916720 http://blog.sina.com.cn/s/blog_923fdd9b0102vbe0.html 与OpenGL ES1.x渲染管线相比&#xff0c;OpenGL ES 2.0渲染管线中“顶点着色器”取代了OpenGL ES 1.x渲染管线中的“变换和光照”&#xff1b;…

mysql输出代码_mysql常用代码

1、mysql导出和导入导入&#xff1a;mysql -uroot -p --default-character-setutf8 数据库名 < 数据SQL文件导出&#xff1a;mysqldump --opt -R -E -u root --password1234 数据库名 > 数据SQL文件.sql2、检查某表字段是否有NULLset dbname库名,tbname表名;select con…

贪心算法之最短路径问题(Dijkstra算法)

1、问题 一个求单源最短路径的问题。给定有向带权图 G =(V, E ), 其中每条边的权是非负实数。此外,给定 V 中的一个顶点, 称为源点。现在要计算从源到所有其他各顶点的最短路径长 度,这里路径长度指路上各边的权之和。 2、分析 3、代码实现 1、普通C++实现 #include &l…

【ArcGIS风暴】ArcGIS获取线段上等间距的点

题目&#xff1a;现需要沿某条道路等间距安装路灯&#xff0c;请给出路灯点的位置及其坐标 实现思路&#xff1a; 一、数字化道路&#xff0c;获取Road线状矢量数据&#xff08;如shapefile文件&#xff09;。 二、在开始编辑状态下&#xff0c;执行Divide命令&#xff0c;按…

Centos实现svn本地认证apache认证

本文系统&#xff1a;Centos6.5_x64 本地lamp环境 ip:192.168.184.129一、搭建svn&#xff0c;实现svn方式访问、本地用户认证二、实现http方式访问、apache本地文件认证subversion目录说明&#xff1a;*dav目录&#xff1a;是提供apache与mod_dav_svn使用的目录&#xff0c;让…

ASP.NET Core 6.0对热重载的支持

.NET 热重载技术支持将代码更改&#xff08;包括对样式表的更改&#xff09;实时应用到正在运行的程序中&#xff0c;不需要重启应用&#xff0c;也不会丢失应用状态。一、整体介绍目前 ASP.NET Core 6.0 项目都支持热重载。在以下情况下支持应用的热重载&#xff1a;1. 仅运行…

std::bind 详解及参数解析

// Bind_std_function.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #include <iostream> #include <functional> #include <random> #include <memory> //学习bind的用法 void f(int n1, int n2, int n3, const int & n4…

【ArcGIS风暴】ArcGIS中制作GPS点位轨迹线及多边形

目录 一、制作线状shapefile文件 二、制作多边形shapefile文件 将GPS数据导成点状shapefile文件比较容易,那么怎么把这些点连接起来做成线状shapefile文件,以及面状shapefile文件呢?现在把思路描述如下: 一、制作线状shapefile文件 1、首先将GPS数据转换成点状shapefil…

vscode搜索文件_VS Code 新图标来临 —— 侧边栏、文件管理器、搜索、调试等区域的图标迎来全新设计...

今天(北京时间 2019 年 7 月 9 日)&#xff0c;微软 Visual Studio Code 团队的高级设计师 Miguel Solorio 在 Twitter 上宣布了全新的图标已经来到了 VS Code Insiders 版本&#xff01;这意味着&#xff0c;全新的图标将会在下个月发布的 VS Code 1.37 正式版中出现。此次图标…

贪心算法之用优先队列解决最短路径问题(Dijkstra算法)

1、问题 最短路径问题(Dijkstra算法)用 优先队列实现,问题描述和分析和优先队列先看前面我的几篇博客 贪心算法之最短路径问题(Dijkstra算法) C++之STL之priority_queue 2、用优点队列实现 #include <iostream> #include <cstdio> #include <stack> #…

[活动 3.30]MAUI 跨平台应用开发实战

点击上方蓝字关注我们&#xff08;本文阅读时间&#xff1a;4 分钟&#xff09;活动介绍▌MAUI 跨平台应用开发实战前端应用开发往往需要面对 iOS、Android、Windows 等多平台开发的问题。如能用一种开发工具进行多平台的开发&#xff0c;可以跨平台共享 UI 布局和设计&#xf…

Kickstart之添加自动化脚本

自动化安装系统后我们希望能够在系统安装前后自动执行一些命令和脚本。比如超过2T的硬盘转换成GPT模式&#xff0c;所以需要在系统安装前执行parted命令&#xff1b;系统安装后我们可以让系统自动运行某些命令和脚本&#xff0c;比如puppet、zabbix等等。所有配置只需在ks.cfg下…