Dapper是一種輕量級的ORM(對象關系映射)工具,它提供了高效且易于使用的方式來執行數據庫操作。
Dapper是由Stack Overflow團隊開發并維護的,它的主要目標是提供比EF更快、更直接的方式訪問數據庫。
Dapper的主要特點包括:
基于純ADO.NET而不是EF,因此性能更高
支持多種數據庫,如SQL Server、MySQL、Oracle等
通過使用動態SQL和強類型參數,可以有效地減少代碼量
提供了多種簡單易用的方法,在大多數情況下,只需一兩行代碼就可以完成常見的CRUD操作
接下來,我們將詳細介紹如何使用Dapper進行數據庫操作。
一、安裝Dapper:
Dapper可以通過NuGet包管理器安裝。打開Visual Studio,選擇“項目”菜單下的“管理NuGet程序包”,在搜索欄中輸入“Dapper”,然后點擊“安裝”按鈕即可。
你也可以手動在項目中添加以下引用:
using Dapper; using System.Data.SqlClient;
二、連接數據庫
在使用Dapper之前,我們需要先連接數據庫。Dapper支持多種數據庫,本文以SQL Server為例。
創建一個 SqlConnection 對象,然后使用該對象打開數據庫連接。
string connectionString = "your connection string"; using (var connection = new SqlConnection(connectionString)) { connection.Open(); // 這里執行數據庫操作 }
三、執行查詢操作
Dapper提供了多種方法來執行查詢操作。其中,最常見的方法是 Query 和 QueryFirstOrDefault。
Query
Query 方法返回一個包含查詢結果的 IEnumerable<T>(T為查詢結果映射的類型)。
var products = connection.Query<Product>("SELECT * FROM Products"); foreach (var product in products) { // 處理查詢結果 }
如果你需要使用參數化查詢,可以像下面這樣使用命名參數:
var products = connection.Query<Product>("SELECT * FROM Products WHERE CategoryId = @CategoryId", new { CategoryId = 1 }); foreach (var product in products) { // 處理查詢結果 }
或者使用匿名對象:
var parameters = new { CategoryId = 1 }; var products = connection.Query<Product>("SELECT * FROM Products WHERE CategoryId = @CategoryId", parameters); foreach (var product in products) { // 處理查詢結果 }
QueryFirstOrDefault
QueryFirstOrDefault 方法返回一個單個實體對象,如果未找到任何記錄,則返回 null。
var product = connection.QueryFirstOrDefault<Product>("SELECT * FROM Products WHERE Id = @Id", new { Id = 1 }); if (product != null) { // 處理查詢結果 }
QueryMultiple
如果你需要一次性執行多個查詢語句,可以使用 QueryMultiple 方法。該方法返回一個 SqlMapper.GridReader 對象,通過該對象可以依次獲取各個查詢語句的結果。
以下示例中,我們首先執行兩個查詢語句,獲取商品和商品分類的數據。然后,我們使用 Read 方法分別獲取這兩個結果集,并將它們轉換為實體對象列表。
var multi = connection.QueryMultiple("SELECT * FROM Products; SELECT * FROM Categories"); var products = multi.Read<Product>().ToList(); var categories = multi.Read<Category>().ToList();
四、執行插入、更新和刪除操作
Dapper還提供了多種方法來執行插入、更新和刪除操作。其中,最常見的方法是 Execute 和 ExecuteScalar。
Execute
Execute 方法返回受影響行數。
var rowsAffected = connection.Execute("INSERT INTO Products (Name, Price) VALUES (@Name, @Price)", new { Name = "Product 1", Price = 9.99m });
你也可以使用命名參數或匿名對象:
var parameters = new { Name = "Product 1", Price = 9.99m }; var rowsAffected = connection.Execute("INSERT INTO Products (Name, Price) VALUES (@Name, @Price)", parameters);
ExecuteScalar
ExecuteScalar方法返回一個單一的值,通常用于執行插入操作并返回插入記錄的主鍵。
var productId = connection.ExecuteScalar<int>("INSERT INTO Products (Name, Price) VALUES (@Name, @Price); SELECT CAST(SCOPE_IDENTITY() as int)", new { Name = "Product 2", Price = 19.99m });
與 Query 和 Execute 方法一樣,你也可以使用命名參數或匿名對象。
對象映射
Dapper支持自動將查詢結果映射到實體對象上。在使用Dapper時,我們需要確保查詢語句中的列名與實體類的屬性名相對應。
以下是一個簡單的示例:
public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } } // 查詢商品數據 var products = connection.Query<Product>("SELECT Id, Name, Price FROM Products");
注意,如果查詢語句中的列名與實體類的屬性名不匹配,則無法自動映射。此時,你需要手動指定映射關系。
以下是一個手動映射的示例:
public class Product { public int ProductId { get; set; } public string ProductName { get; set; } public decimal ProductPrice { get; set; } } // 查詢商品數據 var products = connection.Query<Product>("SELECT Id as ProductId, Name as ProductName, Price as ProductPrice FROM Products");
總結
Dapper是一種簡單易用、高效的ORM工具,它提供了多種方法來執行數據庫操作,能夠滿足大多數開發人員的需求。在使用Dapper時,我們需要先連接數據庫,然后使用 Query、QueryFirstOrDefault、QueryMultiple、Execute 或 ExecuteScalar 等方法執行相應的數據庫 操作。同時,Dapper還支持自動將查詢結果映射到實體對象上,從而進一步簡化了代碼編寫。
浙公網安備 33010602011771號