如何在 C# 中使用 Dapper ORM

譯文連接: https://www.infoworld.com/art...

對象關係映射(ORM)這個概念已經存在很長時間了,ORM的做用就是用來解決 編程領域的 object model 和關係數據庫中的 data model 的不匹配問題,Dapper 是一個開源的,輕量級的 ORM 框架,由 Stack Overflow 團隊開發,Dapper 和其餘流行的ORM框架相比,最大的優勢就是羽翼級。html

Dapper在最初開發時就考慮到了性能和易用性,它支持在 事務,存儲過程 或者 批量插入時進行靜態或者動態的對象綁定。git

使用 Visual Studio 安裝 Dapper ORM

要想了解 Dapper,從下面的步驟開始吧:github

    1. 打開 Visual Studio
    1. 點擊 文件 -> 新建 -> 項目
    1. 選擇 網站 -> ASP.Net Web Application
    1. 給 web 項目指定一個名字
    1. 而後選擇一個 空模板
    1. 點擊 肯定 生成 project

這樣咱們就建立好了一個 ASP.Net web application 項目web

若是你已經安裝了 NuGet,你能夠經過 NuGet 去安裝 Dapper,作法就是在 解決方案窗口 下的 Project 上右鍵選擇 Manage NuGet Package ... 而且找到 Dapper,而後點擊安裝開啓這個安裝過程,一旦 Dapper 被成功安裝,你就能夠愉快的玩起來了哈。sql

使用 Dapper ORM 進行增刪查改

接下來我用 Dapper 寫一些簡單的 CURD 語句來操做數據庫,考慮以下的 IDG 數據庫,包含了一個 Author 表,表的字段以下:數據庫

  • ID
  • FirstName
  • LastName

在使用Dapper時,你須要針對 數據庫表 建立一個簡單的實體類(POCO class),下面定義了 Author 實體對應 IDB 數據庫的 Author 表。編程

public class Author
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

使用 Dapper 的 Query() 擴展方法,能夠實現對數據庫的查詢而後將數據填充到你的 object model 中,下面方法的做用就是從 Author 表中查詢全部的數據,而後存儲到內存中,最後返回一個集合給調用方。app

public List<Author> ReadAll()
    {
         using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings[「AdventureWorks」].ConnectionString))
         {
             return db.Query<Author>
             (「Select * From Author」).ToList();
         }
    }

對了,爲了可以使用上 Dapper 的擴展方法,你須要在代碼文件的頂部引入 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() 方法能夠實現對數據的新增,修改,刪除,此方法返回一個整數值,該值表示在執行查詢時受到的影響行數。

下面的方法展現瞭如何使用 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 方法返回了一個受影響的行數,意味着這麼多的記錄被修改,上面這段代碼只會有一條記錄被更新,因此說若是更新成功返回的就是 1。

在 Dapper ORM 中使用 存儲過程

爲了可以使用 Dapper 執行存儲過程,在調用 Query 或者 Execute 方法時須要手工指定一下 CommandType 類型,下面的例子展現瞭如何使用 Dapper 執行 存儲過程。

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 框架也是支持事務操做的,若是有必要的話能夠使用事務,使用方式很簡單,你能夠利用 BeginTransaction() 和 EndTransaction() 方法,其實和你使用 ADO.NET 的事務方式是一摸同樣的,將須要事務的語句代碼放置在 BeginTransaction 和 EndTransaction 之間便可。

Dapper ORM 真的是至關羽翼級 而且很是方便使用,它不會爲你生成任何sql語句,在這種狀況下還可以很是便捷的將查詢結果映射到你的 POCO 對象上,最🐂👃的是,它的執行速度遠超 Entity Framework,實際上,能和原生的 ADO.Net 媲美。

更多高質量乾貨:參見個人 GitHub: dotnetfly
相關文章
相關標籤/搜索