news 2026/10/14 1:55:10

Dapper

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Dapper

不使用Dapper是什么意思 & Dapper是什么

1. Dapper 是什么

Dapper 是.NET生态里最流行的轻量ORM(对象关系映射)库,Stack‑Overflow开发的,NuGet包名Dapper。

ORM:把数据库表 → C#实体类对象自动映射,不用手写大量IDataReader读取字段、赋值给Model属性的样板代码。

Dapper典型用法(对比原生写法)

假设表对应实体TItem:

// Dapper写法,简短,不用自己写Reader循环 using var conn = new SQLiteConnection(connectionString); var list = conn.Query<TItem>("select * from TItem where Id=@id", new { id = 1 }).ToList();

Dapper帮你做的事:

  1. 打开连接、参数处理
  2. 执行SQL
  3. 自动把DataReader的列,映射到TItem的属性
  4. 直接返回实体对象集合,不用手动reader["字段名"]逐个赋值

底层依旧是原生IDbConnection/IDbCommand,只是做封装,不是新数据库驱动。


2. “不使用Dapper”是什么含义

你的架构:BaseTableManager<TItem>,直接用原生SQLiteConnection/SQLiteCommand/DataReader,不引入Dapper NuGet包,不调用Dapper扩展方法。

也就是全部手写ADO.NET原生代码,示例模式:

// 原生ADO.NET,不使用Dapper using var cmd = new SQLiteCommand(sql, connection); cmd.Parameters.AddWithValue("@id", 1); using var reader = cmd.ExecuteReader(); var list = new List<TItem>(); while(reader.Read()) { var item = new TItem(); item.Id = (long)reader["Id"]; item.Name = reader["Name"]?.ToString(); // 每一个字段都手动从reader读取,赋值给实体 list.Add(item); }

“不使用Dapper”带来的特点

✅ 优点

  1. 零第三方依赖,项目不需要安装Dapper包;插件场景(CAD插件、桌面程序)程序集更少,避免版本冲突。
  2. 完全掌控SQL执行、参数、读取逻辑,没有Dapper内部映射黑盒;方便做自定义缓存、特殊类型转换、底层性能调优。
  3. 适合基类封装,自己实现一套通用的Reader→实体映射逻辑。

❌ 缺点

  1. 样板代码多:查询每一张表,都要写while(reader.Read())、手动读取每一列赋值。
  2. 需要自己封装通用转换逻辑(所以才抽象出BaseTableManager<TItem>基类,自己手写简易映射代替Dapper)。

3. 和你现有架构的关系

你的BaseTableManager<TItem>抽象基类,本质就是自己造一个简易ORM基类,替代Dapper的映射能力:

  • 内部维护缓存字典;
  • 自己封装SQLiteConnection/Command;
  • 自己处理DataReader读取字段,反射把reader字段赋值给TItem属性;
  • 实现增删改查、缓存、保存逻辑。

“不使用Dapper” = 不引用Dapper库,映射逻辑全部自己在基类内部实现,不走Dapper的Query<T>()扩展方法。

简单对比

方式依赖对象映射
使用DapperNuGet Dapper包库自动Reader→实体
你的现有架构仅SQLite驱动自己基类内部反射实现Reader→实体

4. 什么时候会纠结要不要引入Dapper

  • 如果引入Dapper:基类可以大幅简化,不用手写Reader反射映射;但要多带Dapper程序集,CAD插件环境容易出现依赖版本冲突。
  • 如果坚持不使用Dapper:就要完善BaseTableManager<TItem>,写通用反射工具方法,把DataReader转TItem的逻辑封装到基类,子类只关心SQL。

举个基类内部可写的简易工具(无Dapper):

protected virtual TItem ReadItemFromReader(SQLiteDataReader reader) { // 通过反射读取TItem属性,从reader赋值,自己实现映射,替代Dapper }

如果你需要,我可以给一段适配你这个BaseTableManager<TItem>架构的原生Reader反射映射的示例代码。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 1:54:48

SSM+微信原生小程序宠物寄养系统毕业设计实战

简介&#xff1a;本资源是一份完整的本科毕业设计论文&#xff0c;面向计算机专业学生及微信小程序开发初学者&#xff0c;聚焦宠物寄养服务场景的信息化解决方案。论文以微信小程序为前端载体&#xff0c;结合SSM&#xff08;SpringSpringMVCMyBatis&#xff09;后端框架与MyS…

作者头像 李华
网站建设 2026/10/14 1:52:51

WebGL三维散点图实战:从数据清洗到交互渲染的性能优化指南

简介&#xff1a;这份资源是面向Qt开发者与3D数据可视化学习者的Qt 3D散点图示例工程&#xff0c;围绕在三维空间中渲染交互式数据点这一核心问题展开&#xff0c;适合已具备一定C与Qt基础、希望入门Qt 3D模块的中级开发者参考实践。压缩包共6个文件&#xff0c;约7KB&#xff…

作者头像 李华
网站建设 2026/10/14 1:52:45

数据库版本混乱?Liquibase 自动迁移 + contexts 裁剪,qkl-boot 这么管的

数据库版本混乱&#xff1f;Liquibase 自动迁移 contexts 裁剪&#xff0c;qkl-boot 这么管的 导读&#xff1a;新同事拉代码一启动&#xff0c;表没建、字段没加、索引没配&#xff0c;报错信息五花八门——这种痛在多人协作项目里太常见了。qkl-boot 的做法是启动时用 Liqui…

作者头像 李华
网站建设 2026/10/14 1:52:03

截图自动导入Excel:PowerShell、VBA与openpyxl批量处理实战

简介&#xff1a;面向日常办公中需要频繁将截图整理进Excel报表的人群&#xff0c;这份docx文档给出了一种低门槛、可复用的批量截图与自动导入方案。资源从小工具选型入手&#xff0c;讲解了SuperCapture与Excel工具箱的搭配使用&#xff0c;涵盖固定区域截图、图片自动命名、…

作者头像 李华