ASP.NET Core 中的 ORM 之 Dapper
Dapper簡介
Dapper是.NET的一款輕量級ORM工具(GitHub),也可稱為簡單對象映射器。在速度方面擁有微型ORM之王的稱號。
它是半自動的,也就是說實體類和SQL語句都要自己寫,但它提供自動對象映射。是通過對IDbConnection接口的擴展來操作數據庫的。
優點:
輕量,只有一個文件
性能高,Dapper的速度接近與IDataReader,取列表的數據超過了DataTable。
支持多種數據庫。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server
使用Dapper可以自動進行對象映射,通過Emit反射IDataReader的序列隊列,來快速的得到和產生對象
使用Dapper
下面簡單創建一個Web API應用并通過Dapper訪問MySQL數據。
創建MySQL測試數據
創建Web API應用并添加NuGet引用
Install-Package MySql.Data
Install-Package Dapper
新建一個Product類
新建一個DBConfig類用于創建并返回數據庫連接
創建簡單的倉儲接口和類
在Startup ConfigureServices方法里面配置依賴注入
在Controller里面調用倉儲方法
測試API是否可以正常工作
Dapper對存儲過程和事務的支持
存儲過程
事務
Dapper對多表映射的支持
使用Dapper Contrib或其他擴展
Dapper Contrib擴展Dapper提供了CRUD的方法
Get
GetAll
Insert
Update
Delete
DeleteAll
添加NuGet引用Dapper.Contrib
Install-Package Dapper.Contrib為Product類添加數據注解
增加一個新的倉儲類繼承
修改Startup ConfigureServices方法里面配置依賴注入
services.AddTransient<IProductRepository, ContribProductRepository>();測試,這樣可以少寫了不少基本的SQL語句。
其他一些開源的Dapper擴展
| Dapper.SimpleCRUD | Get?GetList?GetListPaged?Insert?Update?Delete?DeleteList?RecordCount |
| Dapper Plus | Bulk Insert?Bulk Delete?Bulk Update?Bulk Merge?Bulk Action Async?Bulk Also Action?Bulk Then Action |
| Dapper.FastCRUD | Get?Find?Insert?Update?BulkUpdate?Delete?BulkDelete?Count |
| Dapper.Mapper | Multi-mapping |
引入工作單元Unit of Work
倉儲模式往往需要工作單元模式的介入來負責一系列倉儲對象的持久化,確保數據完整性。網上關于工作單元模式的實現方式有多種,但其本質都是工作單元類通過創建一個所有倉儲共享的數據庫上下文對象,來組織多個倉儲對象。
網上的一些實現方式:
Implementing the Repository and Unit of Work Patterns in an ASP.NET MVC Application
微軟之前給出的一個示例,倉儲類做為工作單元的變量,并通過工作單元傳入一致的context參數創建。
DDD 領域驅動設計-談談 Repository、IUnitOfWork 和 IDbContext 的實踐
博客園一位大神的總結,最終采用的方案是倉儲類負責查詢,工作單元類負責增刪改等數據持久化操作。
優缺點不作討論,適合自己的就是最好的,這里采用了另外一種實現方式:
定義DapperDBContext
后面省略了很多代碼,有興趣通過閱讀原文到博客上去閱讀。
原文地址:?https://www.cnblogs.com/royzshare/p/9522127.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的ASP.NET Core 中的 ORM 之 Dapper的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET Core使用NLog通过Kaf
- 下一篇: Asp.Net Core 2.2.0-p