使用 Dapper 進行資料存取初探

2022-12-04

筆記 Dapper 進行資料 CRUD 的使用方式。

logo

說明

使用前必須先使用 Nuget 安裝 Dapper。

Install-Package Dapper

SELECT

相較於 ADO.NET 的連線方式,先準備 Command 再準備 Adapter 接著使用 DataTable 以及 DataRow 來操作。

使用 Dapper 直觀又方便,當然這必須是先要在 ADO.NET 痛過、麻煩過才會知道 Dapper 的好。

HomeController.cs

public static string ConnetionString {
    get => ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString;
}

public ActionResult Dapper(int id = 1)
{

    IEnumerable<dynamic> model = null;
    using (var cn = new SqlConnection(ConnetionString))
    {
        var list = cn.Query("SELECT * FROM Products WHERE CategoryID=@cid", new { cid = id });
        model = list;
    }
    return View(model);
}

預設上 Dapper 可以不需要建立 POCO 物件,就可以 Dynamic 的方式處理回傳的資料,但會失去強型別以及 Visual Studio Intellisence 的提示好處,因此也可以建立 POCO,將回傳的資料進行轉型。

var list = cn.Query<Products>("SELECT * FROM Products WHERE CategoryID=@cid", new { cid = id });

SELECT With Join

要處理的 Join 複數資料表也沒有問題。

IEnumerable<dynamic> model = null;
using (var cn = new SqlConnection(ConnetionString))
{
    var list = cn.Query(
        "SELECT P.*, C.CategoryName FROM Products AS P " +
        "LEFT JOINCategories AS C ON P.CategoryID = C.CategoryID " +
        "WHERE C.CategoryID = @cid", new { cid = id });
    model = list;
}
return View(model);

Insert

使用 Execute 新增資料的對應也相當直觀,執行後的回應是被異動的資料列數。

public ActionResult DapperInsert()
{

    int count = 0;
    using (var cn = new SqlConnection(ConnetionString))
    {
        count = cn.Execute(
            "INSERT INTO Products (ProductName, Discontinued) VALUES(@name, @discontinue)",
            new
            {
                name = "New Product",
                discontinue = false
            });
    }
    return View(count);
}

參考資料

短小精悍的.NET ORM神器 -- Dapper | 黑暗執行緒

Dapper 筆記 | POYCHANG

菜雞新訓記 (3): 使用 Dapper 來連線到資料庫 CRUD 吧 | igouist

【Entity Framework搭配Dapper】使用時機 | 暐翰