Dapper如何实现增删改查 Dapper CRUD操作完整指南

来源:网站建设作者:阿亮头衔:草根站长
导读:本期聚焦于小伙伴创作的《Dapper如何实现增删改查 Dapper CRUD操作完整指南》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Dapper如何实现增删改查 Dapper CRUD操作完整指南》有用,将其分享出去将是对创作者最好的鼓励。

Dapper是.NET生态中轻量高效的ORM框架,它基于ADO.NET封装,既保留了原生ADO.NET的性能优势,又简化了数据库操作的复杂度,实现增删改查是Dapper最基础也最常用的功能。

Dapper环境准备

使用Dapper前需要先引入对应的NuGet包,在Visual Studio中右键项目选择管理NuGet程序包,搜索Dapper安装即可,当前最新稳定版本适配.NET Framework和.NET Core全系列。

同时需要准备对应的数据库上下文,这里以SQL Server为例,先创建数据库连接对象:

using System.Data;
using System.Data.SqlClient;
using Dapper;

// 数据库连接字符串,实际开发建议放在配置文件中
string connectionString = "Server=127.0.0.1;Database=TestDB;Uid=sa;Pwd=123456;";
// 创建连接对象
IDbConnection connection = new SqlConnection(connectionString);

基础增删改查实现

1. 新增操作(Create)

新增操作可以使用Execute方法,传入插入SQL和对应的参数对象即可,Dapper会自动将对象的属性映射到SQL参数。

首先定义对应的实体类:

public class User
{
    public int Id { get; set; }
    public string UserName { get; set; }
    public int Age { get; set; }
    public string Email { get; set; }
}

执行新增的代码:

// 插入单条数据
string insertSql = "INSERT INTO [User] (UserName, Age, Email) VALUES (@UserName, @Age, @Email)";
User newUser = new User
{
    UserName = "张三",
    Age = 25,
    Email = "zhangsan@ipipp.com"
};
// Execute方法返回受影响的行数
int affectedRows = connection.Execute(insertSql, newUser);
Console.WriteLine($"新增成功,受影响行数:{affectedRows}");

// 批量插入
List<User> userList = new List<User>
{
    new User { UserName = "李四", Age = 28, Email = "lisi@ipipp.com" },
    new User { UserName = "王五", Age = 30, Email = "wangwu@ipipp.com" }
};
int batchAffectedRows = connection.Execute(insertSql, userList);
Console.WriteLine($"批量新增成功,受影响行数:{batchAffectedRows}");

2. 查询操作(Read)

查询操作使用Query或者QueryFirstOrDefault等方法,Dapper会自动将查询结果映射到对应的实体对象。

// 查询所有数据
string queryAllSql = "SELECT Id, UserName, Age, Email FROM [User]";
List<User> allUsers = connection.Query<User>(queryAllSql).ToList();
Console.WriteLine($"总用户数:{allUsers.Count}");

// 根据条件查询单条数据
string queryByIdSql = "SELECT Id, UserName, Age, Email FROM [User] WHERE Id = @Id";
User user = connection.QueryFirstOrDefault<User>(queryByIdSql, new { Id = 1 });
if (user != null)
{
    Console.WriteLine($"查询到用户:{user.UserName},年龄:{user.Age}");
}

// 带参数的条件查询
string queryByAgeSql = "SELECT Id, UserName, Age, Email FROM [User] WHERE Age > @MinAge";
List<User> ageUsers = connection.Query<User>(queryByAgeSql, new { MinAge = 25 }).ToList();
Console.WriteLine($"年龄大于25的用户数:{ageUsers.Count}");

3. 修改操作(Update)

修改操作和新增类似,使用Execute方法执行更新SQL即可。

string updateSql = "UPDATE [User] SET UserName = @UserName, Age = @Age, Email = @Email WHERE Id = @Id";
User updateUser = new User
{
    Id = 1,
    UserName = "张三更新",
    Age = 26,
    Email = "zhangsan_update@ipipp.com"
};
int updateRows = connection.Execute(updateSql, updateUser);
Console.WriteLine($"修改成功,受影响行数:{updateRows}");

4. 删除操作(Delete)

删除操作同样使用Execute方法,传入删除SQL和对应参数。

// 删除单条数据
string deleteSql = "DELETE FROM [User] WHERE Id = @Id";
int deleteRows = connection.Execute(deleteSql, new { Id = 2 });
Console.WriteLine($"删除成功,受影响行数:{deleteRows}");

// 批量删除
string batchDeleteSql = "DELETE FROM [User] WHERE Age < @MaxAge";
int batchDeleteRows = connection.Execute(batchDeleteSql, new { MaxAge = 20 });
Console.WriteLine($"批量删除成功,受影响行数:{batchDeleteRows}");

进阶用法说明

存储过程调用

Dapper也支持直接调用存储过程,只需要指定命令类型为存储过程即可。

// 调用存储过程查询用户
string procSql = "GetUserByAge";
List<User> procUsers = connection.Query<User>(procSql, new { MinAge = 25 }, commandType: CommandType.StoredProcedure).ToList();

事务处理

如果需要保证多个操作的原子性,可以使用事务,Dapper的事务基于ADO.NET的事务实现。

using (IDbTransaction transaction = connection.BeginTransaction())
{
    try
    {
        string insertSql = "INSERT INTO [User] (UserName, Age, Email) VALUES (@UserName, @Age, @Email)";
        string updateSql = "UPDATE [User] SET Age = Age + 1 WHERE UserName = @UserName";
        connection.Execute(insertSql, new User { UserName = "赵六", Age = 22, Email = "zhaoliu@ipipp.com" }, transaction);
        connection.Execute(updateSql, new { UserName = "张三" }, transaction);
        // 提交事务
        transaction.Commit();
        Console.WriteLine("事务执行成功");
    }
    catch (Exception ex)
    {
        // 回滚事务
        transaction.Rollback();
        Console.WriteLine($"事务执行失败:{ex.Message}");
    }
}

注意事项

  • 使用完连接对象后建议及时关闭或者释放,避免连接池耗尽,建议使用using包裹连接对象
  • SQL参数尽量使用匿名对象或者实体对象传递,避免SQL注入风险
  • 如果查询的字段名和实体属性名不一致,可以使用AS关键字在SQL中重命名字段,或者使用[Column]特性标注实体属性
  • 批量操作如果数据量较大,建议分批次执行,避免单次操作耗时过长

DapperCRUD操作ORM框架ADO.NET修改时间:2026-07-02 19:54:37

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。