日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

  • Dapper,通過提供IDbConnection的擴(kuò)展方法來查詢數(shù)據(jù)庫。它的優(yōu)點在于可以輕松地執(zhí)行參數(shù)化查詢,將結(jié)果轉(zhuǎn)化為對象;非常高效,在速度方面擁有micro-ORM之王的稱號。

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

那有不有把2者優(yōu)點結(jié)合的ORM呢?

RepoDb

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

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

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

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

基礎(chǔ)功能

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

然后,在程序啟動時進(jìn)行初始化:

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默認(rèn)不支持的功能。

Merge

用于插入新行或更新表中的現(xiàn)有行。默認(rèn)使用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?})); }

批量操作

如果要執(zhí)行批量操作,比如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); }

結(jié)論

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

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

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

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。