[C#.NET] ORM - Dapper 強大的 dynamic parameters

[C#.NET] ORM - Dapper 強大的 dynamic parameters

好久之前看到 黑大蔡煥麟 老師介紹過這套工具,因為要找尋 ORM 的解決方案,所以今天把它拿出來把玩,若不想要使用肥大的EF,它是一個不錯的選項

  • Dapper 擁有超級好用的參數機制,參數可使用具名或是匿名型別、Dictionary型別,欄位名稱要與SQL語句的參數一樣
  • 一樣的寫法在EF裡面會掛掉,然而 Dapper 不會,它不需要像 EF 需要明確的指定 Select 的欄位,要與回傳的型別一樣,下圖是使用 EF 掛掉的情況(害我撞牆的主因)

 

從 Nuget 上安裝 Dapper 就能使用它了,我仍是使用上篇的情境跟資料庫 http://www.dotblogs.com.tw/yc421206/archive/2015/03/11/150701.aspx最令人驚豔的是它的動態參數功能,下面這個例子我使用 DynamicParameters 型別

public void Dapper_SqlCommand_Delete_Test()
{
	var connectString = ConfigurationManager.ConnectionStrings["NorthwindDbContext"].ConnectionString;
	using (var connection = new SqlConnection(connectString))
	{
		connection.Open();

		var orderDetails = connection.Query<Order_Detail>(
			@"SELECT od.ProductID,OrderID FROM [Order Details] od WHERE od.OrderID=@OrderID",
			new { OrderID = 11106 });//←匿名參數

		StringBuilder sb = new StringBuilder();
		int id = 1;
		var dynamicParams = new DynamicParameters();//←動態參數
		dynamicParams.Add("p0", 11106);

		foreach (var item in orderDetails)
		{
			sb.Append(string.Format(
@"DELETE [dbo].[Order Details]
WHERE (([OrderID] = @p0) AND ([ProductID] = @p{0}))", id));
			dynamicParams.Add("p" + id, item.ProductID);

			id++;
		}
		connection.Execute(sb.ToString(), dynamicParams);
	}
}

 

執行結果如下:

image

還有更多的功能請上 https://github.com/StackExchange/dapper-dot-net


本文出自:http://www.dotblogs.com.tw/yc421206/Admin/EditPosts.aspx?PostID=150703

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo