日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

还在纠结Dapper或者EF Core?不妨试试“混合ORM”--RepoDb

發布時間:2023/12/4 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 还在纠结Dapper或者EF Core?不妨试试“混合ORM”--RepoDb 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在.NET世界中,提到ORM,最常用的是下面2個:

  • Dapper,通過提供IDbConnection的擴展方法來查詢數據庫。它的優點在于可以輕松地執行參數化查詢,將結果轉化為對象;非常高效,在速度方面擁有micro-ORM之王的稱號。

  • EF Core,微軟開源的ORM。它的優點在于允許執行CRUD操作而無需編寫SQL。

那有不有把2者優點結合的ORM呢?

RepoDb

RepoDb是一個輕量級、高性能、高效的混合ORM。它提供了Dapper相似的簡單性,同時又像EF Core將一些復雜的操作進行了封裝, 因此它被認為是一種“混合ORM”。

RepoDb在“微”和“全”操作的使用之間切換很容易,這為開發人員在開發應用程序時提供了靈活性。

“高性能”和“低內存使用率”是這個庫的主要特點,你可以從下面這張圖中窺見一斑:

RepoDb支持SQL Server, SQLite, MySQL和PostgreSQL數據庫,下面就讓我們使用SQL Server數據庫來了解一下RepoDb有哪些特別之處!

基礎功能

首先,需要引用Nuget包RepoDb.SqlServer。

然后,在程序啟動時進行初始化:

RepoDb.SqlServerBootstrap.Initialize();

RepoDB所有功能都支持 Raw-SQL/Fluent 2種方式。

CRUD

//Raw-SQL using?(var?connection?=?new?SqlConnection(ConnectionString)) {var?user?=?connection.Query<User>("SELECT?*?FROM?[dbo].[User]?WHERE?(Id?=?@Id);",?new?{?Id?=?1?}).FirstOrDefault(); }//Fluent using?(var?connection?=?new?SqlConnection(ConnectionString)) {var?user?=?connection.Query<User>(e?=>?e.Id?==?1).FirstOrDefault(); }//Raw-SQL using?(var?connection?=?new?SqlConnection(ConnectionString)) {var?affectedRows?=?connection.ExecuteScalar<int>("UPDATE?[dbo].[User]?SET?Name?=?@Name?WHERE?Id?=?@Id;",new{Id?=?1,Name?=?"My?IO",}); }//Fluent using?(var?connection?=?new?SqlConnection(ConnectionString)) {var?user?=?new?User{Id?=?1,Name?=?"My?IO",};var?affectedRows?=?connection.Update<User>(user); }

多表查詢

using?(var?connection?=?new?SqlConnection(ConnectionString)) {var?orderId?=?10045;var?tuple?=?connection.QueryMultiple<Order,?OrderItems>(order?=>?order.Id?==?orderId,?orderItem?=>?orderItem.OrderId?==?orderId);var?order?=?tuple.Item1.FirstOrDefault();var?orderItems?=?tuple.Item2.AsList();order.OrderItems?=?orderItems; }

in查詢

using?(var?connection?=?new?SqlConnection(ConnectionString)) {var?names?=?new?[]?{?"wx",?"My?IO"?};var?users?=?connection.Query<user>(e?=>?names.Contains(e?=>?e.Name)); }

高級功能

下面舉例幾個Dapper和EF Core默認不支持的功能。

Merge

用于插入新行或更新表中的現有行。默認使用Id作為條件,也可以用qualifiers指定條件:

var?user?=?new?User {Name?=?"My?IO",Age?=?20, }; using?(var?connection?=?new?SqlConnection(ConnectionString)) {var?id?=?connection.Merge(user,?qualifiers:?(p?=>?new?{?p.Name?})); }

批量操作

如果要執行批量操作,比如BulkDelete, BulkInsert, BulkMerge和BulkUpdate,必須先安裝Nuget包RepoDb.SqlServer.BulkOperations。

using?(var?connection?=?new?SqlConnection(connectionString)) {var?users?=?GetUsers(10000);var?insertedRows?=?connection.BulkInsert(users); }

分頁

using?(var?connection?=?new?SqlConnection(connectionString)) {var?orderBy?=?OrderField.Parse(new?{?Id?=?Order.Descending?});var?page?=?0;?//?從0開始var?rowsPerBatch?=?20;?//每頁20條var?people?=?connection.BatchQuery<User>(page:?page,rowsPerBatch:?rowsPerBatch,orderBy:?orderBy,where:?e?=>?e.IsActive?==?true); }

結論

篇幅有限,RepoDb的其他功能在這就不做介紹了,你可以到官網(https://repodb.net/)進行詳細了解。

總體來說,使用RepoDb開發代碼更容易、更快捷。

RepoDb具有Dapper很多沒有的可立即使用的豐富功能集。使用它,必將幫助你快速交付代碼。

如果你覺得這篇文章對你有所啟發,請關注我的個人公眾號”My IO“,記住我!

總結

以上是生活随笔為你收集整理的还在纠结Dapper或者EF Core?不妨试试“混合ORM”--RepoDb的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。