如何在C#中使用Dapper ORM
對(duì)象關(guān)系映射(ORM)這個(gè)概念已經(jīng)存在很長(zhǎng)時(shí)間了,ORM的作用就是用來(lái)解決 編程領(lǐng)域的 object model 和關(guān)系數(shù)據(jù)庫(kù)中的 data model 的不匹配問(wèn)題,Dapper 是一個(gè)開(kāi)源的,輕量級(jí)的 ORM 框架,由 Stack Overflow 團(tuán)隊(duì)開(kāi)發(fā),Dapper 和其他流行的ORM框架相比,最大的優(yōu)點(diǎn)就是羽翼級(jí)。
Dapper在最初開(kāi)發(fā)時(shí)就考慮到了性能和易用性,它支持在 事務(wù),存儲(chǔ)過(guò)程 或者 批量插入時(shí)進(jìn)行靜態(tài)或者動(dòng)態(tài)的對(duì)象綁定。
使用 Visual Studio 安裝 Dapper ORM
要想了解 Dapper,從下面的步驟開(kāi)始吧:
- 打開(kāi) Visual Studio
- 點(diǎn)擊 文件 -> 新建 -> 項(xiàng)目
- 選擇 網(wǎng)站 -> ASP.Net Web Application
- 給 web 項(xiàng)目指定一個(gè)名字
- 然后選擇一個(gè) 空模板
- 點(diǎn)擊 確定 生成 project
這樣我們就創(chuàng)建好了一個(gè) ASP.Net web application 項(xiàng)目
如果你已經(jīng)安裝了 NuGet,你可以通過(guò) NuGet 去安裝 Dapper,做法就是在 解決方案窗口 下的 Project 上右鍵選擇 Manage NuGet Package ... 并且找到 Dapper,然后點(diǎn)擊安裝開(kāi)啟這個(gè)安裝過(guò)程,一旦 Dapper 被成功安裝,你就可以愉快的玩起來(lái)了哈。
使用 Dapper ORM 進(jìn)行增刪查改
接下來(lái)我用 Dapper 寫(xiě)一些簡(jiǎn)單的 CURD 語(yǔ)句來(lái)操作數(shù)據(jù)庫(kù),考慮如下的 IDG 數(shù)據(jù)庫(kù),包含了一個(gè) Author 表,表的字段如下:
- ID
- FirstName
- LastName
在使用Dapper時(shí),你需要針對(duì) 數(shù)據(jù)庫(kù)表 創(chuàng)建一個(gè)簡(jiǎn)單的實(shí)體類(POCO class),下面定義了 Author 實(shí)體對(duì)應(yīng) IDB 數(shù)據(jù)庫(kù)的 Author 表。
public class Author { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } }
使用 Dapper 的 Query() 擴(kuò)展方法,可以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的查詢?nèi)缓髮?shù)據(jù)填充到你的 object model 中,下面方法的作用就是從 Author 表中查詢所有的數(shù)據(jù),然后存儲(chǔ)到內(nèi)存中,最后返回一個(gè)集合給調(diào)用方。
public List<Author> ReadAll() { using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings[“AdventureWorks”].ConnectionString)) { return db.Query<Author> (“Select * From Author”).ToList(); } }
對(duì)了,為了能夠使用上 Dapper 的擴(kuò)展方法,你需要在代碼文件的頂部引入 Dapper 命名空間,如下圖:
下面的方法展示了如何從 Author table 表中查詢指定的記錄。
public Author Find(int id) { using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString)) { return db.Query<Author>(“Select * From Author “ + WHERE Id = @Id”, new { id }).SingleOrDefault(); } }
Dapper 的 Execute() 方法可以實(shí)現(xiàn)對(duì)數(shù)據(jù)的新增,修改,刪除,此方法返回一個(gè)整數(shù)值,該值表示在執(zhí)行查詢時(shí)受到的影響行數(shù)。
下面的方法展示了如何使用 Dapper 更新一條記錄。
public int Update(Author author) { using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString)) { string sqlQuery ="UPDATE Author SET FirstName = @FirstName, " + “ LastName = @LastName “ + “WHERE Id = @Id”; int rowsAffected = db.Execute(sqlQuery, author); return rowsAffected; } }
正如上面代碼所述,Update 方法返回了一個(gè)受影響的行數(shù),意味著這么多的記錄被修改,上面這段代碼只會(huì)有一條記錄被更新,所以說(shuō)如果更新成功返回的就是 1。
在 Dapper ORM 中使用 存儲(chǔ)過(guò)程
為了能夠使用 Dapper 執(zhí)行存儲(chǔ)過(guò)程,在調(diào)用 Query 或者 Execute 方法時(shí)需要手工指定一下 CommandType 類型,下面的例子展示了如何使用 Dapper 執(zhí)行 存儲(chǔ)過(guò)程。
public List<Author> Read() { using (IDbConnection db = new SqlConnection (ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString)) { string readSp ="GetAllAuthors"; return db.Query<Author>(readSp, commandType: CommandType.StoredProcedure).ToList(); } }
Dapper 框架也是支持事務(wù)操作的,如果有必要的話可以使用事務(wù),使用方式很簡(jiǎn)單,你可以利用 BeginTransaction() 和 EndTransaction() 方法,其實(shí)和你使用 ADO.NET 的事務(wù)方式是一摸一樣的,將需要事務(wù)的語(yǔ)句代碼放置在 BeginTransaction 和 EndTransaction 之間即可。
Dapper ORM 真的是相當(dāng)羽翼級(jí) 并且非常方便使用,它不會(huì)為你生成任何sql語(yǔ)句,在這種情況下還能夠非常便捷的將查詢結(jié)果映射到你的 POCO 對(duì)象上,最🐂👃的是,它的執(zhí)行速度遠(yuǎn)超 Entity Framework,實(shí)際上,能和原生的 ADO.Net 媲美。
以上就是如何在C#中使用Dapper ORM的詳細(xì)內(nèi)容,更多關(guān)于C# 使用Dapper ORM的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- ORM框架之Dapper簡(jiǎn)介和性能測(cè)試
- C#中Dapper的使用教程
- 如何在Asp.Net Core中集成ABP Dapper
- 在.NetCore(C#)中使用ODP.NET Core+Dapper操作Oracle數(shù)據(jù)庫(kù)
- .NET Core Dapper操作mysql數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法
- .net core2.0下使用Identity改用dapper存儲(chǔ)數(shù)據(jù)(實(shí)例講解)
- 基于Dapper實(shí)現(xiàn)分頁(yè)效果 支持篩選、排序、結(jié)果集總數(shù)等
- .Net?Core下使用Dapper的方法
相關(guān)文章
C#中FormClosing與FormClosed的區(qū)別詳細(xì)解析
本文是對(duì)C#中FormClosing與FormClosed的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-10-10C#?DateTime.Now.ToString()?用法示例講解
這篇文章主要介紹了C#?DateTime.Now.ToString()?用法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01c#進(jìn)度條 progressBar 使用方法的小例子
1、創(chuàng)建進(jìn)度條窗口2、在其他窗口中調(diào)用方法ShowProcess(int percent,string message)2013-04-04C#中控件動(dòng)態(tài)添加事件綁定的時(shí)機(jī)詳解
這篇文章主要給大家介紹了在C#中為控件動(dòng)態(tài)添加事件綁定的時(shí)機(jī)的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2017-06-06Unity實(shí)現(xiàn)文本轉(zhuǎn)貼圖
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)文本轉(zhuǎn)貼圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05WPF實(shí)現(xiàn)圖片合成或加水印的方法【2種方法】
這篇文章主要介紹了WPF實(shí)現(xiàn)圖片合成或加水印的方法,結(jié)合實(shí)例形式分析了2種比較實(shí)用的WPF圖片操作相關(guān)技巧,需要的朋友可以參考下2017-03-03