Home >> Blog >> 一起來學習 Dapper

一起來學習 Dapper

該站點適用於想要學習如何使用 Dapper - Stack Overflow背後的人們製作的微型 ORM 的開發人員。

什麼是小巧玲瓏?

Dapper 是一種流行的簡單對象映射工具。它主要設計用於您希望以強類型方式處理資料的場景 - 作為 .NET 應用程序中的業務對象,但不想花費數小時編寫程式碼來映射來自 ADO.NET 資料的查詢結果讀者到這些對象的實例。Dapper 是一個在Apache 許可下的開源項目。它以 Nuget 包的形式提供,已下載超過 1600 萬次。

Dapper 是 ORM 嗎?

Dapper 屬於被稱為micro-ORM的工具家族。這些工具僅執行成熟的對象關係映射器的一部分功能,例如Entity Framework Core。功能因產品而異。下表提供了與 ORM 相比,您可以在微型 ORM 中找到的功能的一般概念:

什麼是 HSTS 以及如何實施?

Dapper專注於ORM的O和M -對象M應用。

[1] Dapper 添加了一些擴展,提供最小的更改跟踪功能 [2] Dapper 實際上確實生成 SQL,但方式有限。什麼時候應該使用 Dapper?

什麼時候應該使用 Dapper?

在決定是否使用 Dapper 時,應該牢記它存在的主要原因——性能。Dapper 的最初開發者使用的是 Entity Framework Core 的前身——短命的Linq to SQL。他們發現查詢性能不足以應對相關站點(Stackoverflow)所經歷的不斷增加的流量,因此他們編寫了自己的微 ORM。

因此,在只讀資料經常更改且經常被請求的情況下,Dapper 是一個不錯的選擇。它特別適用於不需要在內存中持久保存複雜對像圖的無狀態場景(例如 Web)。

Dapper 不像完整的 ORM 那樣將用 .NET 語言編寫的查詢轉換為 SQL。因此,您需要熟悉用 SQL 編寫查詢,或者讓別人為您編寫查詢。

Dapper 對您的資料庫架構沒有真正的期望。它不像 Entity Framework Core 那樣依賴約定,因此在資料庫結構沒有特別規範化的情況下,Dapper 也是一個不錯的選擇。

Dapper 與 ADO.NET 對IDbConnection像一起工作,這意味著它將與任何有 ADO.NET 提供程序的資料庫系統一起工作。

沒有理由不能在同一個項目中同時使用 ORM 和微型 ORM。

Dapper 實際上做了什麼?

下面是一些用於從資料庫中檢索資料並將其具體化為Product對象集合的標準 ADO.NET 程式碼:

var sql = "select * from products";
var products = new List< Product>();
using (var connection = new SqlConnection(connString))
{
connection.Open();
using (var command = new SqlCommand(sql, connection))
{
using (var reader = command.ExecuteReader())
{
var product = new Product
{
ProductId = reader.GetInt32(reader.GetOrdinal("ProductId")),
ProductName = reader.GetString(reader.GetOrdinal("ProductName")),
SupplierId = reader.GetInt32(reader.GetOrdinal("SupplierId")),
CategoryId = reader.GetInt32(reader.GetOrdinal("CategoryId")),
QuantityPerUnit = reader.GetString(reader.GetOrdinal("QuantityPerUnit")),
UnitPrice = reader.GetDecimal(reader.GetOrdinal("UnitPrice")),
UnitsInStock = reader.GetInt16(reader.GetOrdinal("UnitsInStock")),
UnitsOnOrder = reader.GetInt16(reader.GetOrdinal("UnitsOnOrder")),
ReorderLevel = reader.GetInt16(reader.GetOrdinal("ReorderLevel")),
Discontinued = reader.GetBoolean(reader.GetOrdinal("Discontinued")),
DiscontinuedDate = reader.GetDateTime(reader.GetOrdinal("DiscontinuedDate"))
};
products.Add(product);
}
}
}

在最基本的層面上,Dapper 將上面示例中突出顯示的賦值程式碼塊替換為以下內容:

Tproducts = connection.Query< Product>(sql);

Dapper 還負責創建命令並在需要時打開連接。如果你曾經使用 Dapper 只是為了管理這樣的基本任務,它將為你節省數小時的時間。事實上,Dapper 能夠做得更多。

你在哪裡可以得到 Dapper?

Dapper 可從 Nuget 獲得。它與 .NET Standard 2.0 兼容,這意味著它可以在面向完整框架和 .NET Core 的 .NET 應用程序中使用。您可以通過 .NET CLI 使用以下命令安裝最新版本:

dotnet add package Dapper

或來自 Visual Studio 中的包管理器控制台的此命令:

install-package Dapper

Dapper 的源程式碼可在 GitHub 上找到。

sql

to

returns

using

net

oledbconnection

card

oledbcommand

returns

param

param

message