物件關係對映(ORM)這個概念已經存在很長時間了,ORM的作用就是用來解決 程式設計領域的 object model 和關係資料庫中的 data model 的不匹配問題,Dapper 是一個開源的,輕量級的 ORM 框架,由 Stack Overflow 團隊開發,Dapper 和其他流行的ORM框架相比,最大的優點就是羽翼級。
Dapper在最初開發時就考慮到了效能和易用性,它支援在 事務,儲存過程 或者 批次插入時進行靜態或者動態的物件繫結。
使用 Visual Studio 安裝 Dapper ORM要想了解 Dapper,從下面的步驟開始吧:
開啟 Visual Studio點選 檔案 -> 新建 -> 專案選擇 網站 -> ASP.Net Web Application 給 web 專案指定一個名字然後選擇一個 空模板點選 確定 生成 project這樣我們就建立好了一個 ASP.Net web application 專案
如果你已經安裝了 NuGet,你可以透過 NuGet 去安裝 Dapper,做法就是在 解決方案視窗
下的 Project 上右鍵選擇 Manage NuGet Package ...
並且找到 Dapper,然後點選安裝開啟這個安裝過程,一旦 Dapper 被成功安裝,你就可以愉快的玩起來了哈。
接下來我用 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 表中查詢所有的資料,然後儲存到記憶體中,最後返回一個集合給呼叫方。
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 媲美。