[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);
}
}
執行結果如下:
還有更多的功能請上 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