Dapper.Contrib——更加優雅地使用Dapper進行增刪改查

来源:https://www.cnblogs.com/51net/archive/2023/03/12/17208853.html
-Advertisement-
Play Games

簡介 Dapper是介於Entity framework與ADO的折中選擇。既滿足手寫查詢的高性能需求,又簡化了資料庫對象映射為記憶體對象的繁雜工作。Dapper.Contrib是對Dapper的進一步封裝,使對象的基本增刪改查等操作進一步簡化。 為什麼使用Dapper.Contrib 如果僅僅使用D ...


簡介

Dapper是介於Entity framework與ADO的折中選擇。既滿足手寫查詢的高性能需求,又簡化了資料庫對象映射為記憶體對象的繁雜工作。Dapper.Contrib是對Dapper的進一步封裝,使對象的基本增刪改查等操作進一步簡化。

為什麼使用Dapper.Contrib

如果僅僅使用Dapper,要對一個對象進行insert操作需要如下操作

 using (var connection = new SqlConnection("鏈接字元串"))
{
       var users = connection.Execute("insert into Demo (Name,Age) values('張三',23)");
}

Dapper.Contrib不需要寫sql,操作對象即可

複製代碼
using (var connnection = DbHelper.GetConnection())
{
      var result = connnection.Insert(new Demo
       {
            Age = 23,
            Name = "張三",
       });
}
複製代碼

 使用Dapper.Contrib

工欲善其事,必先利其器。要想不寫sql愉快地增刪改當然需要前期地配置。

entity配置

 

複製代碼
    [Table("Demo")]
    public class Demo
    {
        [Key] //不是自動增長主鍵時使用ExplicitKey
        public int Id { get; set; }

        public string Name { get; set; }

        public int Age { get; set; }

        [Computed]
        public int ComputedAge => Age * 2;

        [Write(false)]
        public int NoWriteCol { get; set; }

    }
複製代碼

上面的Demo類裡面包含了Dapper.Contrib的所有實體配置選項

  • Table:指定實體對應地資料庫表名,可忽略,但是忽略後實體對應地資料庫表名會在末尾加個s,Demo對應Demos(感覺畫蛇添足了)
  • Key:指定此列為主鍵(自動增長主鍵),可忽略,忽略後預設查找
  • ExplicitKey:指定此列為主鍵(不自動增長類型例如guid,ExplicitKey與Key地區別下麵會詳細講)
  • Computed:計算屬性,打上此標簽,對象地insert,update等操作會忽略此列
  • Write:需穿一個bool值,false時insert,update等操作會忽略此列(和Computed的作用差不多,看了源碼也沒發現與Computed有什麼不一樣的地方,有瞭解的朋友可以賜教下哈)

Key和ExplicitKey這兩項都是指定列為主鍵的。區別是打上Key特性的列在插入時是不能指定值的,只能是資料庫自動增長列,而ExplicitKey特性可以允許在插入時指定值,比如用guid為主鍵類型,則主鍵在插入時必須已經生成好。

 

增刪改查

做好上面的配置後就可以進行實體的操作了,Dapper.Contrib與Dapper一樣都是拓展了DbConnection對象,方法如下(未列出非同步方法)

  • Get<T>(id);
  • IEnumerable<T> GetAll<T>();
  • int Insert<T>(T obj);
  • int Insert<T>(Enumerable<T> list);
  • bool Update<T>(T obj);
  • bool Update<T>(Enumerable<T> list);
  • bool Delete<T>(T obj);
  • bool Delete<T>(Enumerable<T> list);
  • bool DeleteAll<T>();

值得註意的是,從源碼得知,Get方法僅支持單主鍵查詢,如果多主鍵或者沒主鍵都會報錯

 if (keyCount > 1)
                throw new DataException($"{method}<T> only supports an entity with a single [Key] or [ExplicitKey] property");
 if (keyCount == 0)
                throw new DataException($"{method}<T> only supports an entity with a [Key] or an [ExplicitKey] property");

作者:阿笨

      【官方QQ一群:跟著阿笨一起玩NET(已滿)】:422315558跟著阿笨一起玩NET

      【官方QQ二群:跟著阿笨一起玩C#(已滿)】:574187616跟著阿笨一起玩C#

      【官方QQ三群:跟著阿笨一起玩ASP.NET(已滿)】:967920586跟著阿笨一起玩ASP.NET

      【官方QQ四群:Asp.Net Core跨平臺技術開發(可加入)】:829227829阿笨NET(三群)

      【官方QQ五群:.NET Core跨平臺開發技術(可加入)】:647639415阿笨NET(四群)

      【網易雲課堂】:https://study.163.com/provider/2544628/index.htm?share=2&shareId=2544628

      【騰訊課堂】:https://abennet.ke.qq.com

      【51CTO學院】:https://edu.51cto.com/sd/66c64

      【微信公眾號】:微信搜索:跟著阿笨一起玩NET


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 資料庫的重要性不言而喻,不管是什麼系統,什麼應用軟體,也不管它們是 Windows 上的應用程式,還是 Web 應用程式,存儲(持久化)和查詢(檢索)數據都是核心的功能。 大家學習資料庫時,比如 MySQL 這個資料庫管理系統,都是在 CLI(Command Line Interface)上操作數據... ...
  • Tomcat 是 Apache 軟體基金會(Apache Software Foundation)的一個開源項目,實現了 Servlet 及 JSP 規範,可以用來部署 WEB 應用及 WebService;本文主要介紹其基本概念。 1、Tomcat 安裝 安裝 Tomcat 之前需要先安裝 Jav ...
  • 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> OpenGL ES 特效 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> O ...
  • java 線程池預設提供了幾種拒絕策略: 這幾個策略都實現了RejectedExecutionHandler,拿DiscardOldestPolicy來說,查看源碼: 核心代碼只有2行: e.getQueue().poll() 從列表裡彈出1個(最早的)任務,以便讓隊列空出1個位置 e.execut ...
  • 什麼是Git? Git是一個版本控制系統,用於跟蹤電腦文件的變化。Git是一個跟蹤電腦文件變化的版本控制系統,用於幫助協調一個項目中幾個人的工作,同時跟蹤一段時間的進展。換句話說,我們可以說它是一個促進軟體開發中源代碼管理的工具。 Git和SVN的區別 Git是分散式版本控制系統,SVN是集中式 ...
  • 廣發基金外包面試題 說說Spring AOP 說說stream流的常用API 線程池的參數 MCVV,什麼是普通讀和快照讀 redis分片模式是什麼,redis事務,分片模式下事務會生效嗎 說說rocket mq分散式事務是怎麼做的 為什麼要劃分session,怎麼解決耦合問題 說說是怎麼解決分散式 ...
  • 最近接到一個新的需求,需要上傳2G左右的視頻文件,用測試環境的OSS試了一下,上傳需要十幾分鐘,再考慮到公司的資源問題,果斷放棄該方案。 一提到大文件上傳,我最先想到的就是各種網盤了,現在大家都喜歡將自己收藏的「小電影」上傳到網盤進行保存。網盤一般都支持斷點續傳和文件秒傳功能,減少了網路波動和網路... ...
  • 1. 垃圾回收器 1.1. 對象可以在被需要時創建,不再使用時由JVM自動回收 1.2. GC是查找不再使用的對象,然後回收這些對象相關記憶體的過程 1.2.1. 找到不使用的對象、回收其記憶體、壓縮堆記憶體 1.3. 優化垃圾回收器比跟蹤指針引起的bug要容易得多(且耗時更少) 1.4. VM必須定期搜 ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...