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;
View Code

二、連接數據庫
     在使用Dapper之前,我們需要先連接數據庫。Dapper支持多種數據庫,本文以SQL Server為例。
     創建一個 SqlConnection 對象,然后使用該對象打開數據庫連接。

string connectionString = "your connection string";
using (var connection = new SqlConnection(connectionString))
{
    connection.Open();
    // 這里執行數據庫操作
}
View Code

三、執行查詢操作
     Dapper提供了多種方法來執行查詢操作。其中,最常見的方法是 Query 和 QueryFirstOrDefault。
     Query
     Query 方法返回一個包含查詢結果的 IEnumerable<T>(T為查詢結果映射的類型)。

var products = connection.Query<Product>("SELECT * FROM Products");
foreach (var product in products)
{
    // 處理查詢結果
}
View Code

     如果你需要使用參數化查詢,可以像下面這樣使用命名參數:

var products = connection.Query<Product>("SELECT * FROM Products WHERE CategoryId = @CategoryId", new { CategoryId = 1 });
foreach (var product in products)
{
    // 處理查詢結果
}
View Code

     或者使用匿名對象:

var parameters = new { CategoryId = 1 };
var products = connection.Query<Product>("SELECT * FROM Products WHERE CategoryId = @CategoryId", parameters);
foreach (var product in products)
{
    // 處理查詢結果
}
View Code

    QueryFirstOrDefault 

    QueryFirstOrDefault 方法返回一個單個實體對象,如果未找到任何記錄,則返回 null。

var product = connection.QueryFirstOrDefault<Product>("SELECT * FROM Products WHERE Id = @Id", new { Id = 1 });
if (product != null)
{
    // 處理查詢結果
}
View Code

    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();
View Code

四、執行插入、更新和刪除操作
      Dapper還提供了多種方法來執行插入、更新和刪除操作。其中,最常見的方法是 Execute 和 ExecuteScalar。
      Execute
      Execute 方法返回受影響行數。

var rowsAffected = connection.Execute("INSERT INTO Products (Name, Price) VALUES (@Name, @Price)", new { Name = "Product 1", Price = 9.99m });
View Code

     你也可以使用命名參數或匿名對象:

var parameters = new { Name = "Product 1", Price = 9.99m };
var rowsAffected = connection.Execute("INSERT INTO Products (Name, Price) VALUES (@Name, @Price)", parameters);
View Code


     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 });
View Code

    與 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");
View Code

     注意,如果查詢語句中的列名與實體類的屬性名不匹配,則無法自動映射。此時,你需要手動指定映射關系。
     以下是一個手動映射的示例:

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");
View Code

 總結
      Dapper是一種簡單易用、高效的ORM工具,它提供了多種方法來執行數據庫操作,能夠滿足大多數開發人員的需求。在使用Dapper時,我們需要先連接數據庫,然后使用 Query、QueryFirstOrDefault、QueryMultiple、Execute 或 ExecuteScalar 等方法執行相應的數據庫          操作。同時,Dapper還支持自動將查詢結果映射到實體對象上,從而進一步簡化了代碼編寫。