首页 > 其他分享 >.NET6之MiniAPI(二十五):Dapper

.NET6之MiniAPI(二十五):Dapper

时间:2022-11-29 21:34:27浏览次数:39  
标签:MiniAPI return async question sql NET6 Dapper id

  注:如果你使用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] = @SujectTypeID
WHERE ID=@ID";
return (await _connection.ExecuteAsync(sql, question)) > 0;
}
}

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

.NET6之MiniAPI(二十五):Dapper_Dapper

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

  想要更快更方便的了解相关知识,可以关注微信公众号 



.NET6之MiniAPI(二十五):Dapper_Dapper_02

 

标签:MiniAPI,return,async,question,sql,NET6,Dapper,id
From: https://blog.51cto.com/axzxs/5897102

相关文章

  • .NET6之MiniAPI(二十四):用Polly重试
    为了保障系统的稳定和安全,在调用三方服务时,可以增加重试和熔断。重试是调用一次失败后再试几试,避免下游服务一次闪断,就把整个链路终止;熔断是为了防止太多的次数的无效......
  • .NET6之MiniAPI(二十四):用Polly重试
    为了保障系统的稳定和安全,在调用三方服务时,可以增加重试和熔断。重试是调用一次失败后再试几试,避免下游服务一次闪断,就把整个链路终止;熔断是为了防止太多的次数的无效......
  • .NET6之MiniAPI(二十五):Dapper
    注:如果你使用Dapper一段时间了,这篇你可以跳过去了。在第十二篇中,我们聊过官方的ORM——EntityFramework,它可以把SQL细节都隐藏,这对于一些标准化的关系数据库项目......
  • .NET6之MiniAPI(二十三):Refit
    本篇是与上篇HttpClient有关联的,有前篇中,我们是直接使用HttpClient来发出请求的,所有的请求信息都是我们根据需要自己来填充的。那Refit是什么呢?它是一个让我们调用API......
  • .NET6之MiniAPI(二十三):Refit
    本篇是与上篇HttpClient有关联的,有前篇中,我们是直接使用HttpClient来发出请求的,所有的请求信息都是我们根据需要自己来填充的。那Refit是什么呢?它是一个让我们调用API就......
  • .NET6之MiniAPI(二十二):HttpClient
    说明:本篇不是说明HttpClient怎么使用,而以分享在asp.netcoreminiapi框架下,HttpClient的引入和使用方式。我们在业务开发中,免不了调用三方的服务,这时就会用到Htt......
  • .NET6之MiniAPI(二十二):HttpClient
    说明:本篇不是说明HttpClient怎么使用,而以分享在asp.netcoreminiapi框架下,HttpClient的引入和使用方式。我们在业务开发中,免不了调用三方的服务,这时就会用到Htt......
  • .NET6之MiniAPI(二十一):限流
    限流,可以网络的基础设施进行配置实现,也可以在网关的地方进行限流,但服务本身的限流也不可或缺,因为当多副本时,一个副本故障,流量对于其他副本来说会提高,如果超过其承受请求量......
  • .NET6之MiniAPI(二十一):限流
    限流,可以网络的基础设施进行配置实现,也可以在网关的地方进行限流,但服务本身的限流也不可或缺,因为当多副本时,一个副本故障,流量对于其他副本来说会提高,如果超过其承受请求量......
  • .NET6之MiniAPI(十九):NLog
    在本系例文章的第八篇中,我们聊过官方的日志实现,即《.NET6之MiniAPI(八):日志》。但官方的日志功能更多是提供了一个实现基础,对于要求一个灵活,强大,方便的日志体系,官方的还是......