.NET Dapper的正确使用姿势
高性能、易排查、易运维、灵活可控是.NET Dapper的显著优点。
与Entity Framework相比,Dapper依赖手动编写SQL语句,收盘源码这在修改数据库结构时可能不易发现错误。但通过单元测试和细心操作可以避免这类问题。
数据库连接的管理需视情况而定:主动管理需手动控制连接打开与关闭,而自动管理则由Dapper自行负责。GitHub上的源码提供具体实现细节。
ADO.NET默认配置了连接池,但使用Dapper时可能出现连接池超出最大限制的情况。解决方案是确保连接的正确打开和关闭。
批量操作如新增、修改、删除数据时,可利用参数化和IN语法优化。
在Dapper中,通过C#语法优势,可以简化IF条件语句的编写。例如,可以使用字符串拼接方式进行操作,提升代码可读性。乐视直播源码
事务处理在Dapper中不如EF便捷。通过标记特性,实现方法自动开启和提交事务,简化代码结构。需要借助Nuget包Autofac实现。
SQL监控是Dapper的一个关键功能,MiniProfiler是一个强大的工具,可用于检测和性能监控,支持多种数据库。通过Nuget包MiniProfiler.AspNetCore实现监控。
完整源码示例可从GitHub链接获取,具体实现细节在文末提供。
.NET Core 工作流WorkFlowCore
WorkFlowCore是一个为.NET Core量身定制的轻量级工作流引擎,具备Fluent API、多任务、持久化以及并行处理功能,适合小型工作流和责任链需求的开发。在.NET 7环境下,WorkFlowCore提供详细的文档和源码,以便开发者深入学习。
工欲善其事必先利其器,安装WorkFlowCore后,需要注入框架到项目中,抓娃娃机源码使得后续工作流相关操作得以实现。WorkFlowCore主要分为步骤和工作流两大部分,通过定义步骤来组成工作流。
步骤是工件流中执行的最小单元,每个步骤可以接收输入并产生输出,输出结果可传递回工作流。定义步骤时,可以选择继承`StepBody`或`StepBodyAsync`类,并在`Run`或`RunAsync`方法中编写逻辑,区分异步操作。
工作流则通过继承`IWorkflow`接口来定义,接口包含`Id`、`Version`和`Build`方法,用于标识工作流。要使用工作流,需要在工作流主机中注册并启动,使用`RegisterWorkflow`和`Start`方法完成这一过程。
步骤与工作流之间的参数传递极为灵活,通过定义输入和输出类型,可以将数据类作为参数传入,步骤中通过`Input`和`Output`方法接收和返回数据。不传递参数时,每次执行将使用默认值。qq群网站源码
WorkFlowCore支持外部事件的触发,允许工作流等待特定事件,并将事件数据传递给后续步骤。使用`WaitFor`方法等待事件触发,通过`PublishEvent`方法触发事件,实现工作流与外部系统之间的交互。
活动作为工作流中的特殊步骤,可以被外部工作队列处理,提供输入和输出参数,与事件有所不同。活动的处理通过`GetPendingActivity`方法获取待处理活动,开发者可自定义活动逻辑。
错误处理功能允许在步骤中配置异常处理策略,如重试、挂起或终止工作流。这为系统提供了更强大的容错能力。
流程控制方面,WorkFlowCore提供分支、循环、判断、并行等机制,让工作流逻辑更加灵活。`CreateBranch`方法用于创建分支,微擎借贷源码`branch`方法选择分支执行,`Parallel`方法并行执行任务,`Schedule`方法安排异步方法在特定时间执行,`Recur`方法设置重复执行任务。
Saga事务是WorkFlowCore中的一种高级功能,允许封装一系列步骤,每个步骤都包含补偿步骤,确保事务的原子性、一致性、隔离性和持久性。使用`CompensateWith`方法添加补偿步骤,确保在异常发生时正确回滚。
持久化支持是WorkFlowCore的关键特性之一,允许工作流数据在Redis、MongoDB、SQL Server等存储系统中持久化。通过安装相应的NuGet包,开发者可以轻松集成持久化功能,增强工作流的稳定性和可靠性。
综上所述,WorkFlowCore为.NET Core应用提供了丰富的工作流处理能力,从安装到复杂逻辑处理,再到错误处理和持久化支持,全面覆盖了工作流开发的关键需求,是构建灵活、高效工作流系统的重要工具。
🔥🔥基于Net6+Vue2/Vue3+Element-ui开发的RBAC通用权限管理系统
项目源码位于:不做码农/ZrAdminNetCore
项目起源于对现有技术栈的探索与满足。在GitHub和Gitee上,我找到了大量基于Java后端的项目,这些项目在后端依赖管理和配置上存在复杂性,同时,前端业务封装过于繁杂,导致代码难以理解。借鉴了Java Ruoyi项目的代码风格,我决定构建一个前后端分离的.NET项目,旨在提供一个更简洁、高效且易于维护的解决方案。
ZRAdmin.NET的前端技术栈基于Vue2.x或Vue3.x,辅以vuex、vue-router、vue-cli、axios、element-ui、vite、webpack、echarts和国际化插件in。通过使用Visual Studio Code作为开发工具,实现了代码的高效编写与管理。
后端技术则专注于实现核心功能,优化了配置和依赖管理,旨在提供一个稳定、高性能的API服务。
项目地址提供了一个直观的演示图,展示了其在实际应用中的功能与界面。如果您觉得ZRAdmin.NET在开发过程中对您有所帮助,请给予支持,通过在GitHub上Star该项目,以示鼓励。
asp.net core入门之Startup
ASP.NET Core入门之Startup解析
Startup是ASP.NET Core应用程序的启动入口。在.NET 5及之前版本,通常通过startup.cs类进行程序初始化构造。而在.NET 5之后,操作简化,可以直接在Program类的主函数中构造配置Startup,或采用顶级语句方式直接编写。
在startup配置中,`var app = builder.Build();`之前的代码负责应用初始化,包括依赖注入和配置加载等操作,对应于startup.cs中的`ConfigureServices`方法。随后的配置步骤则是中间件设置,对应于`Configure`方法。新版中,`UseRouting`和`UseEndpoints`用于注册路由中间件的调用不再显式,因为最小托管模型下终结点路由中间件已包装整个中间件管道,故无需再调用。`app.MapRazorPages();`相当于调用了`app.UseRouting();`和`app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); });`。
了解扩展Startup的方法,`IStartupFilter`接口用于扩展Startup功能。它允许在不显式注册默认中间件的情况下添加默认值到管道的开头,实现配置请求管道。每个`IStartupFilter`可以在管道中添加一个或多个中间件。筛选器按照添加顺序调用,可在中间件之前或之后添加,从而附加到应用管道的开头或末尾。
通过实践,首先创建ASP.NET Core模板,包含Program文件。接下来添加`IStartupFilter`实现,用于控制台输出执行内容。在Program中注册`StartupFilterOne`,启动程序后可见中间件正常执行。多个`IStartupFilter`实现时,执行顺序与注入顺序相关。新增`StartupFilterTwo`并修改Program代码,发现是先执行`StartupFilterTwo`中的中间件,然后执行`StartupFilterOne`。
中间件注册在管道头部或尾部,调整`StartupFilterTwo`代码将`next(builder)`放在前面执行,可观察到效果变化。在管道尾部执行中间件时,若为终结点中间件,后序中间件可能不会执行。
讨论IStartupFilter的应用场景,适用于模块化开发方案、请求头部管道的校验或数据处理、请求管道尾部的特殊处理,如错误页面处理等。
注意事项强调IStartupFilter只能注册在管道头部或尾部,确保中间件使用顺序正确。若需要在管道中间插入中间件,请使用正常的`app.use`配置。
介绍IHostingStartup概念,可在启动时从外部程序集向应用添加增强功能,如实现代码0侵入的扩展服务。创建`StartupHostLib`类库,添加`Microsoft.AspNetCore.Hosting`包,新增实现`IHostingStartup`的类库。注意添加标记以识别`HostingStartup`,否则无法识别。在`LearnStartup`中引用项目,并在`launchSettings`环境变量中添加`ASPNETCORE_HOSTINGSTARTUPASSEMBLIES`配置。启动项目后发现`HostingStartup`执行顺序优先于应用,但会覆盖应用中间件管道,导致原有中间件消失。通过调整配置和依赖注入,可确保应用中间件正常工作。
总结IHostingStartup的应用场景,适用于代码0侵入场景,如AOP数据收集,无需中间件的场景或符合`IStartupFilter`中间件的场景。详细理解可自行查阅源码,本文仅作简要介绍。
2024-11-30 14:09
2024-11-30 13:52
2024-11-30 12:47
2024-11-30 12:03
2024-11-30 11:47