使用 Dapper 進行資料存取初探
2022-12-04
筆記 Dapper 進行資料 CRUD 的使用方式。
說明
使用前必須先使用 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 | 黑暗執行緒