.NET 帮助

Dapper C#(它如何为开发人员工作)

发布 2024年六月6日
分享:

介绍

在现代软件开发中,高效访问数据库对于应用程序的性能和可扩展性至关重要。 潇洒轻量级对象关系映射器(ORM).NET.NET "提供了一种简化的数据库交互方式。 在本文中,我们将探讨如何在 SQLite 数据库文件中使用 Dapper C#,并通过代码示例展示其简易性和有效性。 此外,我还将介绍名为IronPDF铁软件.

什么是 Dapper?

Dapper 是一种对象关系映射工具。(ORM)翻译工作必须保持专业性,既要保证技术准确性,又要解释这些开发工具的功能和优点。 它是一个简单的对象映射器,可以将面向对象的领域模型映射到传统的关系数据库中。 Dapper 以速度和性能著称,常被称为 "微型 ORM 之王"。它的速度可与原始 ADO.NET 数据阅读器媲美,并通过有用的扩展方法增强了 IDbConnection 接口,以便查询 SQL 数据库。

Dapper 的主要功能

  1. 性能:Dapper 因其轻量级设计和高效的对象映射而以出色的性能著称。

  2. 简单:Dapper 的应用程序接口简约直观,便于开发人员掌握和有效使用。

  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 命令(例如,INSERT、UPDATE、DELETE)并返回受影响行的数量。

    设置环境:在深入学习代码示例之前,请确保您已安装必要的工具:

  4. Visual Studio 或 Visual Studio Code。

  5. .NET SDK。

  6. .NET 的 SQLite 软件包。

    要安装 SQLite 软件包,请在项目目录中执行以下命令:

dotnet add package Microsoft.Data.Sqlite

创建 SQLite 数据库:为便于演示,让我们创建一个名为 "example.db "的简单 SQLite 数据库文件,其中的 "用户 "表包含 "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铁软件该工具允许开发人员在 .NET 应用程序中以编程方式创建、编辑和处理 PDF 文档。 它提供的功能包括从 HTML、图像和其他格式生成 PDF 文档,以及在现有 PDF 文件中添加文本、图像和各种元素。 IronPDF 旨在通过提供一套全面的工具和 API,简化 .NET 开发人员的 PDF 生成和操作任务。

IronPDF 为 .NET 应用程序中的 PDF 生成和操作提供了一系列功能:

  1. HTML 至 PDF 转换:将 HTML 内容(包括 CSS 样式)转换为 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 创建用户表并插入 SQL 查询

  4. 使用 Dapper 通过插入查询向表中添加用户

  5. 查询选择所有用户或默认值

  6. 使用 ChromePdfRendererSaveAs 方法将生成的内容保存为 PDF 文件

输出

Dapper C#(如何为开发人员工作):图 7 - 利用以上安装的所有软件包输出 PDF 的示例

许可证(IronPDF 有试用版)

IronPDF 的许可信息您还可以使用我们的翻译工具,以确保在您的项目中合规使用。

开发人员试用许可证可通过IronPDF 试用许可证页面.

请替换下图所示 appSettings.json 文件中的关键字

{
  "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,开发人员还可以掌握 Dapper 等 ORM 数据库和 IronPDF 等 PDF 生成库的相关技能。

< 前一页
C# Pair 类(开发人员如何使用)
下一步 >
Nswag C#(它如何为开发人员工作)