C#怎么使用Dapper C# Dapper ORM连接数据库方法

发布时间 - 2026-01-29 00:00:00    点击率:
Dapper 是基于 ADO.NET 的轻量级高性能 .NET ORM,仅作极简封装,支持参数化查询与执行,不生成 SQL、不管理实体生命周期;需手动引用数据库驱动,通过 IDbConnection 扩展方法操作,强调控制力与性能。

Dapper 是一个轻量级、高性能的 .NET ORM(对象关系映射)库,它不替代 ADO.NET,而是在其基础上做了极简封装,通过扩展方法直接操作 IDbConnection。它不生成 SQL、不管理实体生命周期、不支持懒加载,但执行快、学习成本低、控制力强。

安装 Dapper 包

在项目中通过 NuGet 安装:

  • Visual Studio:右键项目 → “管理 NuGet 包” → 搜索 Dapper → 安装
  • 命令行(.NET CLI):dotnet add package Dapper
  • 注意:Dapper 本身只依赖 System.Data.Common,无需额外数据库驱动包 —— 但你得自己引用对应数据库的 ADO.NET 驱动,比如 Microsoft.Data.SqlClient(SQL Server)、Npgsql(PostgreSQL)或 MySqlConnector(MySQL)

基础连接与查询(以 SQL Server 为例)

你需要一个打开的数据库连接(IDbConnection),Dapper 的所有扩展方法都挂在这个接口上:

  • 创建连接字符串(例如 SQL Server):"Server=localhost;Database=TestDB;Trusted_Connection=true;"
  • using 确保连接释放:using var conn = new SqlConnection(connectionString);
  • 执行查询:var users = conn.Query("SELECT * FROM Users WHERE Age > @age", new { age = 18 });
  • 插入数据:int rows = conn.Execute("INSERT INTO Users (Name, Age) VALUES (@name, @age)", new { name = "张三", age = 25 });
  • 参数一律用 @参数名 占位符,Dapper 自动处理参数化防止 SQL 注入

常用操作速查

Query():返回多条记录(如 IEnumerable
QuerySingle():必须返回且仅返回 1 条,否则抛异常
QueryFirstOrDefault():返回第一条或 null(推荐用于可能无结果的场景)
Execute():执行 INSERT/UPDATE/DELETE,返回影响行数
QueryMultiple():一次执行多个 SQL(用

分号分隔),返回 GridReader,适合关联查询减少往返

  • 例如联合查用户和订单:var multi = conn.QueryMultiple("SELECT * FROM Users; SELECT * FROM Orders"); var users = multi.Read(); var orders = multi.Read();
  • 注意:GridReader 必须按顺序读取,且不能跳过某一部分

小贴士与避坑提醒

Dapper 不自动映射字段大小写,数据库列名需与 C# 属性名**完全匹配**(默认区分大小写),常见解决方式:

  • 用 SQL 别名:SELECT Id AS ID, UserName AS Name FROM Users
  • 配置全局映射规则(需自定义 IDbConnection 扩展或使用第三方适配器如 Dapper.FluentMap)
  • 确保实体属性是 public get/set,私有字段不会被映射
  • 异步方法存在(如 QueryAsyncExecuteAsync),推荐 Web/API 场景使用
  • 别把 Dapper 当全自动 ORM —— 它不跟踪变更、不缓存、不建表,SQL 和事务逻辑仍需你把控

基本上就这些。Dapper 的核心就是“连接 + SQL 字符串 + 参数对象”,没有魔法,但足够快、足够稳。


# mysql  # app  # 懒加载  # microsoft  # c#  # .net  # sql  # NULL  # 封装  # select  # 字符串  # int  # 接口  # using  # public  # var  # delete  # 对象  # 异步  # visual studio  # database  # postgresql  # 数据库  # 它不  # 高性能  # 是一个  # 是在  # 多个  # 右键  # 自定义  # 不支持  # 为例  # 挂在 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  怎么用AI帮你为初创公司进行市场定位分析?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  详解jQuery停止动画——stop()方法的使用  Swift中swift中的switch 语句  Laravel怎么使用Intervention Image库处理图片上传和缩放  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何在企业微信快速生成手机电脑官网?  Laravel如何处理和验证JSON类型的数据库字段  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  PHP 500报错的快速解决方法  Laravel如何实现用户注册和登录?(Auth脚手架指南)  简历在线制作网站免费版,如何创建个人简历?  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  Laravel如何保护应用免受CSRF攻击?(原理和示例)  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  高性能网站服务器部署指南:稳定运行与安全配置优化方案  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  网站制作价目表怎么做,珍爱网婚介费用多少?  Laravel如何实现数据库事务?(DB Facade示例)  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  如何快速使用云服务器搭建个人网站?  如何在万网自助建站中设置域名及备案?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  高防服务器租用指南:配置选择与快速部署攻略  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  如何制作一个表白网站视频,关于勇敢表白的小标题?  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  清除minerd进程的简单方法  深入理解Android中的xmlns:tools属性  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  Python数据仓库与ETL构建实战_Airflow调度流程详解  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  5种Android数据存储方式汇总  如何在服务器上配置二级域名建站?  JavaScript如何实现音频处理_Web Audio API如何工作?  JavaScript如何实现倒计时_时间函数如何精确控制