Dapper是.NET轻量级ORM框架,通过扩展IDbConnection提供高效数据库操作。1. 使用NuGet安装Dapper包并引用命名空间;2. 手动创建SqlConnection并用using管理连接;3. 用Query<T>执行查询并将结果映射为对象;4. 支持参数化查询防止SQL注入;5. Execute方法执行增删改操作并返回影响行数;6. QueryFirstOrDefault获取单条数据,ExecuteScalar获取标量值;7. QueryMultiple支持多结果集读取;8. 多表关联可通过Query方法结合splitOn映射主从对象关系。核心在于简化原生SQL与对象映射。

Dapper 是一个轻量级的 ORM(对象关系映射)框架,适用于 C# 和 .NET 环境。它通过扩展 IDbConnection 接口,提供了简洁高效的数据库操作方式,特别适合需要高性能和灵活 SQL 控制的场景。相比 Entity Framework,Dapper 更加简单直接,性能也更高。
在项目中使用 Dapper,首先需要通过 NuGet 安装包:
Install-Package Dapper安装完成后,你可以在代码中引用 Dapper 命名空间:
using Dapper;Dapper 不提供连接管理,你需要自己创建并管理数据库连接。以 SQL Server 为例:
using (var connection = new SqlConnection("Server=.;Database=TestDB;Integrated Security=true;"))
{
connection.Open();
// 执行 Dapper 操作
}
注意:推荐使用 using 语句确保连接正确释放。
使用 Query<T> 方法可以将查询结果映射到指定类型。
假设有一个 User 表:
CREATE TABLE User (
Id INT IDENTITY PRIMARY KEY,
Name NVARCHAR(50),
Email NVARCHAR(100)
);
对应的实体类:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
}
查询所有用户:
var users = connection.Query<User>("SELECT * FROM User");
foreach (var user in users)
{
Console.WriteLine($"{user.Id}: {user.Name} - {user.Email}");
}
避免 SQL 注入,使用参数化查询:
var user = connection.Query<User>(
"SELECT * FROM User WHERE Id = @Id",
new { Id = 1 });
多个参数也可以用匿名对象传入:
var result = connection.Query<User>(
"SELECT * FROM User WHERE Name = @Name AND Email = @Email",
new { Name = "张三", Email = "zhangsan@example.com" });
插入数据:
var sql = "INSERT INTO User (Name, Email) VALUES (@Name, @Email)";
var rowsAffected = connection.Execute(sql, new { Name = "李四", Email = "lisi@example.com" });
更新数据:
var sql = "UPDATE User SET Email = @Email WHERE Id = @Id";
var rowsAffected = connection.Execute(sql, new { Id = 1, Email = "newemail@example.com" });
删除数据:
var sql = "DELETE FROM User WHERE Id = @Id";
var rowsAffected = connection.Execute(sql, new { Id = 1 });
Execute 返回受影响的行数。
获取单个对象:
var user = connection.QueryFirstOrDefault<User>("SELECT * FROM User WHERE Id = @Id", new { Id = 1 });
如果没找到,返回 null(引用类型)或默认值。
查询标量值(如计数):
var count = connection.ExecuteScalar<int>("SELECT COUNT(*) FROM User");
一次执行返回多个结果集,提高性能:
var sql = @"
SELECT * FROM User;
SELECT * FROM Order WHERE UserId = @UserId;";
<p>using (var multi = connection.QueryMultiple(sql, new { UserId = 1 }))
{
var users = multi.Read<User>().ToList();
var orders = multi.Read<Order>().ToList();
}
支持将多表查询结果映射到主从对象:
var sql = @"
SELECT u.*, o.*
FROM User u
LEFT JOIN Order o ON u.Id = o.UserId";
<p>var lookup = new Dictionary<int, User>();</p><p>var result = connection.Query<User, Order, User>(sql, (user, order) =>
{
if (!lookup.TryGetValue(user.Id, out var usr))
{
usr = user;
usr.Orders = new List<Order>();
lookup.Add(usr.Id, usr);
}
if (order != null) usr.Orders.Add(order);
return usr;
}, splitOn: "Id");</p><p>var usersWithOrders = lookup.Values;
基本上就这些。Dapper 的核心就是简化 ADO.NET 操作,让你写原生 SQL 的同时,自动映射到对象,不复杂但容易忽略细节比如参数命名和 splitOn 的使用。
以上就是C#怎么使用Dapper C#轻量级ORM框架Dapper的基本用法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号