.NET 幫助

Dapper C#(對開發者的工作原理)

發佈 2024年6月6日
分享:

介紹

在現代軟體開發中,高效訪問資料庫對應用程式的性能和擴展性至關重要。 Dapper輕量級物件關聯映射器(ORM)for .NET,提供了一種簡化的數據庫交互方法。 本文將探討如何使用Dapper C#搭配SQLite數據庫文件,並透過代碼示例展示其簡單性和有效性。 此外,我將介紹一個出色的 PDF 生成庫,名為IronPDFIron Software.

什麼是Dapper?

Dapper 是一種物件關聯映射(ORM).NET 平台的框架。 這是一個簡單的對象映射器,使您可以將面向對象的域模型映射到傳統的關係型數據庫。 Dapper 以其速度和性能而聞名,常被稱為“微型 ORM 之王”。它的速度與原生 ADO.NET 資料讀取器相當,並通過有用的擴展方法增強了 IDbConnection 介面,用於查詢 SQL 資料庫。

Dapper 的主要功能

  1. 效能:Dapper 以其輕量化設計和高效的物件映射而聞名,效能優越。

  2. 簡單性:Dapper 的 API 是簡約且直觀的,使開發者能夠輕鬆掌握並有效使用。

  3. 原生 SQL 支援:Dapper 允許開發者撰寫原生 SQL 查詢,提供對資料庫互動的全面控制。

  4. 物件映射: Dapper將查詢結果直接映射到C#物件,減少樣板代碼並提高代碼可讀性。

  5. 參數化查詢:Dapper 支援參數化查詢,這能防範 SQL 注入攻擊並提高性能。

  6. 多重映射:Dapper 能夠無縫處理一對多和多對多的關係,允許多個查詢高效執行,從而簡化複雜數據檢索。

使用 Dapper 進行非同步資料存取

Dapper 提供非同步擴充方法,與其同步對應方法相似,允許開發者非同步執行資料庫查詢。 這些非同步方法非常適合 I/O 綁定的操作,例如數據庫查詢,這樣主線程可以在等待數據庫操作完成的同時繼續執行其他任務。

Dapper中的關鍵非同步方法

  1. QueryAsync:非同步執行 SQL 查詢,並將結果作為動態物件或強類型物件的序列返回。

  2. QueryFirstOrDefaultAsync:異步執行 SQL 查詢,並返回第一個結果或若未找到結果時的預設值。

  3. ExecuteAsync:異步執行 SQL 命令(例如,插入,更新,刪除)並返回受影響行的數量。

    設定環境:在進入程式碼範例之前,確保您已安裝必要的工具:

  4. Visual Studio 或 Visual Studio Code。

  5. .NET SDK。

  6. 適用於 .NET 的 SQLite 套件。

    要安裝 SQLite 套件,請在您的專案目錄中執行以下命令:

dotnet add package Microsoft.Data.Sqlite

建立 SQLite 資料庫:為了展示目的,讓我們建立一個名為 "example.db" 的簡單 SQLite 資料庫文件,包含一個 "Users" 表,該表包含 "Id"、"Name" 和 "Email" 的欄位。

CREATE TABLE Users (
    Id INTEGER PRIMARY KEY,
    Name TEXT,
    Email TEXT
);
CREATE TABLE Users (
    Id INTEGER PRIMARY KEY,
    Name TEXT,
    Email TEXT
);
CREATE TABLE Users(Id [INTEGER] PRIMARY KEY, Name TEXT, Email TEXT)
VB   C#

使用 Dapper 與 SQLite

  1. 首先,確保您已導入必要的命名空間:
using Microsoft.Data.Sqlite;
using Dapper;
using Microsoft.Data.Sqlite;
using Dapper;
Imports Microsoft.Data.Sqlite
Imports Dapper
VB   C#
  1. 建立與 SQLite 資料庫的連接:
    string connectionString = "Data Source=example.db"; // SQLite database connection string
    using (var connection = new SqliteConnection(connectionString))
    {
        connection.Open();
        // Your Dapper queries will go here
    }
    string connectionString = "Data Source=example.db"; // SQLite database connection string
    using (var connection = new SqliteConnection(connectionString))
    {
        connection.Open();
        // Your Dapper queries will go here
    }
Dim connectionString As String = "Data Source=example.db" ' SQLite database connection string
	Using connection = New SqliteConnection(connectionString)
		connection.Open()
		' Your Dapper queries will go here
	End Using
VB   C#
  1. 使用 Dapper 執行查詢:
    // Define a class to represent the structure of a user
    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
    }
    // Query to select all users or default value
    string query = "SELECT * FROM Users"; // var sql queries
    var users = connection.Query<User>(query).ToList();
    // Display the results
    foreach (var user in users)
    {
        Console.WriteLine($"Id: {user.Id}, Name: {user.Name}, Email: {user.Email}");
    }
    // Define a class to represent the structure of a user
    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
    }
    // Query to select all users or default value
    string query = "SELECT * FROM Users"; // var sql queries
    var users = connection.Query<User>(query).ToList();
    // Display the results
    foreach (var user in users)
    {
        Console.WriteLine($"Id: {user.Id}, Name: {user.Name}, Email: {user.Email}");
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#
  1. 使用 Dapper 將數據插入資料庫:
    // Define a new user 
    var newUser = new User { Name = "John Doe", Email = "john@example.com" };
    // user generated SQL query/stored procedure to insert a new user
    string insertQuery = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)";
    // Execute the query
    connection.Execute(insertQuery, newUser);
    // Define a new user 
    var newUser = new User { Name = "John Doe", Email = "john@example.com" };
    // user generated SQL query/stored procedure to insert a new user
    string insertQuery = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)";
    // Execute the query
    connection.Execute(insertQuery, newUser);
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

介紹 IronPDF

IronPDF是一個來自的C#庫Iron Software允許開發人員在 .NET 應用程式中以程式化方式創建、編輯和操作 PDF 文件。 它提供從 HTML、圖片及其他格式生成 PDF 文件的功能,還可以將文字、圖片及各種元素添加到現有的 PDF 文件中。 IronPDF旨在通過提供全面的工具和API集來簡化.NET開發人員的PDF生成和操作任務。

IronPDF 提供一系列功能,用於在 .NET 應用程式中生成和操作 PDF:

  1. HTML轉PDF轉換:將包括CSS樣式在內的HTML內容轉換為PDF文件。

  2. 圖片轉換為 PDF:將圖像轉換(例如 JPEG、PNG、BMP)轉換為 PDF 文件。

  3. 文字轉PDF轉換:將純文字或格式化文字轉換(RTF)轉換為 PDF 文件。

  4. PDF 生成:以編程方式從頭開始創建 PDF 文件。

  5. PDF編輯:編輯現有的PDF文件,添加或修改文本、圖像和其他元素。

  6. PDF 合併與分割:將多個 PDF 文件合併成單一文件,或將 PDF 文件分割成多個檔案。

  7. PDF 安全:對 PDF 文件應用密碼保護和加密,以限制存取權限並保護敏感資訊。

  8. PDF表單填寫:以程式方式填入PDF表單中的資料。

  9. PDF列印:從您的.NET應用程式直接列印PDF文件。

  10. PDF轉換設定:在PDF生成過程中自訂各種設定,例如頁面大小、方向、邊距、壓縮等。

  11. PDF文本提取:從PDF文件中提取文本內容以進行進一步的處理或分析。

  12. PDF元数据:设置元数据(作者, 標題, 主題, 關鍵字)用於PDF文件。

使用 IronPDF 和 Dapper 生成 PDF 文件

在 Visual Studio 中創建一個控制臺應用程式

Dapper C#(開發人員如何使用):圖 1 - 在 Visual Studio 中創建控制台應用程式

提供專案名稱和位置

Dapper C#(開發人員如何使用):圖 2 - 專案命名

選擇 .NET 版本

Dapper C#(開發人員如何使用):圖 3 - 選擇所需的 .NET 版本

從 Visual Studio 套件管理器或控制台安裝以下套件

dotnet add package Microsoft.Data.Sqlite

Dapper C#(開發人員如何使用):圖 4 - 從 Visual Studio 套件管理器安裝 Microsoft Data Sqlite

dotnet add package Dapper --version 2.1.35

Dapper C#(開發者如何使用):圖 5 - 從 Visual Studio 套件管理器安裝 Dapper

dotnet add package IronPdf --version 2024.4.2
dotnet add package IronPdf --version 2024.4.2
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'dotnet add package IronPdf --version 2024.4.2
VB   C#

Dapper C#(開發者使用方式):圖 6 - 從 Visual Studio 套件管理器安裝 IronPDF

使用以下程式碼生成 PDF 文件

using Dapper;
using IronPdf;
using Microsoft.Data.Sqlite;
string connectionString = "Data Source=ironPdf.db"; // sql server database connection string
var content = "<h1>Demonstrate IronPDF with Dapper</h1>";
content += "<h2>Create a new database using Microsoft.Data.Sqlite</h2>";
content += "<p>new SqliteConnection(connectionString) and connection.Open()</p>";
using (var connection = new SqliteConnection(connectionString))
{
    connection.Open();
    content += "<h2>Create a Users Table using dapper and insert sql query</h2>";
    content += "<p>CREATE TABLE IF NOT EXISTS Users</p>";
    // create table
    string sql = "CREATE TABLE IF NOT EXISTS Users (\n    Id INTEGER PRIMARY KEY,\n    Name TEXT,\n    Email TEXT\n);";
    connection.Execute(sql);
    content += "<h2>Add Users to table using Dapper</h2>";
    content += AddUser(connection, new User { Name = "John Doe", Email = "john@example.com" });
    content += AddUser(connection, new User { Name = "Smith William", Email = "Smith@example.com" });
    content += AddUser(connection, new User { Name = "Rock Bill", Email = "Rock@example.com" });
    content += AddUser(connection, new User { Name = "Jack Sparrow", Email = "Jack@example.com" });
    content += AddUser(connection, new User { Name = "Tomus Tibe", Email = "Tomus@example.com" });
    content += "<h2>Get Users From table using Dapper</h2>";
    // Query to select all users or default value
    string query = "SELECT * FROM Users"; // var sql queries
    var users = connection.Query<User>(query).ToList();
    foreach (var user in users)
    {
        content += $"<p>Id:{user.Id}, Name:{user.Name}, email: {user.Email}</p>";
        Console.WriteLine($"{user.Id}. User Name:{user.Name}, Email:{user.Email}");
    }
    // create Renderer
    var renderer = new ChromePdfRenderer();
    // Create a PDF from HTML string
    var pdf = renderer.RenderHtmlAsPdf(content);
    // Save to a file or Stream
    pdf.SaveAs("dapper.pdf");
}
string AddUser(SqliteConnection sqliteConnection, User user)
{
    // user generated SQL query/stored procedure to insert a new user
    string insertQuery = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)";
    // Execute the query
    sqliteConnection.Execute(insertQuery, user);
    return $"<p>Name:{user.Name}, email: {user.Email}</p>"; 
}
using Dapper;
using IronPdf;
using Microsoft.Data.Sqlite;
string connectionString = "Data Source=ironPdf.db"; // sql server database connection string
var content = "<h1>Demonstrate IronPDF with Dapper</h1>";
content += "<h2>Create a new database using Microsoft.Data.Sqlite</h2>";
content += "<p>new SqliteConnection(connectionString) and connection.Open()</p>";
using (var connection = new SqliteConnection(connectionString))
{
    connection.Open();
    content += "<h2>Create a Users Table using dapper and insert sql query</h2>";
    content += "<p>CREATE TABLE IF NOT EXISTS Users</p>";
    // create table
    string sql = "CREATE TABLE IF NOT EXISTS Users (\n    Id INTEGER PRIMARY KEY,\n    Name TEXT,\n    Email TEXT\n);";
    connection.Execute(sql);
    content += "<h2>Add Users to table using Dapper</h2>";
    content += AddUser(connection, new User { Name = "John Doe", Email = "john@example.com" });
    content += AddUser(connection, new User { Name = "Smith William", Email = "Smith@example.com" });
    content += AddUser(connection, new User { Name = "Rock Bill", Email = "Rock@example.com" });
    content += AddUser(connection, new User { Name = "Jack Sparrow", Email = "Jack@example.com" });
    content += AddUser(connection, new User { Name = "Tomus Tibe", Email = "Tomus@example.com" });
    content += "<h2>Get Users From table using Dapper</h2>";
    // Query to select all users or default value
    string query = "SELECT * FROM Users"; // var sql queries
    var users = connection.Query<User>(query).ToList();
    foreach (var user in users)
    {
        content += $"<p>Id:{user.Id}, Name:{user.Name}, email: {user.Email}</p>";
        Console.WriteLine($"{user.Id}. User Name:{user.Name}, Email:{user.Email}");
    }
    // create Renderer
    var renderer = new ChromePdfRenderer();
    // Create a PDF from HTML string
    var pdf = renderer.RenderHtmlAsPdf(content);
    // Save to a file or Stream
    pdf.SaveAs("dapper.pdf");
}
string AddUser(SqliteConnection sqliteConnection, User user)
{
    // user generated SQL query/stored procedure to insert a new user
    string insertQuery = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)";
    // Execute the query
    sqliteConnection.Execute(insertQuery, user);
    return $"<p>Name:{user.Name}, email: {user.Email}</p>"; 
}
Imports Microsoft.VisualBasic
Imports Dapper
Imports IronPdf
Imports Microsoft.Data.Sqlite
Private connectionString As String = "Data Source=ironPdf.db" ' sql server database connection string
Private content = "<h1>Demonstrate IronPDF with Dapper</h1>"
Private content &= "<h2>Create a new database using Microsoft.Data.Sqlite</h2>"
Private content &= "<p>new SqliteConnection(connectionString) and connection.Open()</p>"
Using connection = New SqliteConnection(connectionString)
	connection.Open()
	content &= "<h2>Create a Users Table using dapper and insert sql query</h2>"
	content &= "<p>CREATE TABLE IF NOT EXISTS Users</p>"
	' create table
	Dim sql As String = "CREATE TABLE IF NOT EXISTS Users (" & vbLf & "    Id INTEGER PRIMARY KEY," & vbLf & "    Name TEXT," & vbLf & "    Email TEXT" & vbLf & ");"
	connection.Execute(sql)
	content &= "<h2>Add Users to table using Dapper</h2>"
	content += AddUser(connection, New User With {
		.Name = "John Doe",
		.Email = "john@example.com"
	})
	content += AddUser(connection, New User With {
		.Name = "Smith William",
		.Email = "Smith@example.com"
	})
	content += AddUser(connection, New User With {
		.Name = "Rock Bill",
		.Email = "Rock@example.com"
	})
	content += AddUser(connection, New User With {
		.Name = "Jack Sparrow",
		.Email = "Jack@example.com"
	})
	content += AddUser(connection, New User With {
		.Name = "Tomus Tibe",
		.Email = "Tomus@example.com"
	})
	content &= "<h2>Get Users From table using Dapper</h2>"
	' Query to select all users or default value
	Dim query As String = "SELECT * FROM Users" ' var sql queries
	Dim users = connection.Query(Of User)(query).ToList()
	For Each user In users
		content += $"<p>Id:{user.Id}, Name:{user.Name}, email: {user.Email}</p>"
		Console.WriteLine($"{user.Id}. User Name:{user.Name}, Email:{user.Email}")
	Next user
	' create Renderer
	Dim renderer = New ChromePdfRenderer()
	' Create a PDF from HTML string
	Dim pdf = renderer.RenderHtmlAsPdf(content)
	' Save to a file or Stream
	pdf.SaveAs("dapper.pdf")
End Using
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'string AddUser(SqliteConnection sqliteConnection, User user)
'{
'	' user generated SQL query/stored procedure to insert a new user
'	string insertQuery = "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)";
'	' Execute the query
'	sqliteConnection.Execute(insertQuery, user);
'	Return string.Format("<p>Name:{0}, email: {1}</p>", user.Name, user.Email);
'}
VB   C#

程式碼說明

  1. 首先,創建一個用於 PDF 生成的字串內容保持器。

  2. 使用 Microsoft.Data.Sqlite 創建一個新的資料庫,connection.Open()` 會建立一個空的資料庫

  3. 使用 Dapper 創建一個 Users 表並插入 SQL 查詢

  4. 使用插入查詢透過 Dapper 將用戶添加到表格中

  5. 選擇所有用戶或默認值的查詢

  6. 使用 ChromePdfRendererSaveAs 方法將生成的內容保存為 PDF。

輸出

Dapper C#(開發者如何使用):圖7 - 範例PDF輸出,使用以上安裝的所有套件

許可證(IronPDF 可試用)

IronPDF 的授權資訊可用於確保您的專案符合規範和使用規範。

開發者可以通過獲取試用許可證IronPDF 試用許可頁面.

請替換以下 appSettings.json 檔案中的 Key

{
  "IronPdf.License.LicenseKey" : "The Key Goes Here"
}
{
  "IronPdf.License.LicenseKey" : "The Key Goes Here"
}
If True Then
  "IronPdf.License.LicenseKey" : "The Key Goes Here"
End If
VB   C#

結論

Dapper 簡化了 .NET 應用程式中的資料存取,當結合 SQLite 時,提供了一個輕量且高效的資料庫管理解決方案。 透過遵循本文中的步驟,您可以利用 Dapper 無縫地與 SQLite 資料庫互動,從而輕鬆構建穩健且可擴展的應用程式。 與IronPDF一起,開發人員還可以獲得與ORM資料庫(如Dapper)和PDF生成庫(如IronPDF)相關的技能。

< 上一頁
C# Pair 類 (對開發人員的運作方式)
下一個 >
Nswag C# (開發人員如何使用)

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,938,203 查看許可證 >