标签: #数据访问

SQL Server 批量核对查询实战:临时表 + SqlBulkCopy + JOIN 一次比对十万级数据

批量核对场景下循环单条查询会带来 N+1 网络往返,IN 列表又受 2100 个参数上限约束。本文基于真实落地的 BulkQueryData 实现,拆解「临时表 + SqlBulkCopy + JOIN」方案:SELECT INTO WHERE 1=2 结构克隆与 identity 列处理、行号列回传技巧、NULL 空值等价匹配条件、统计回填与 try/finally 幂等清理,万行级核对从分钟级降到秒级。

DataTable 扩展方法实战:从零构建 ADO.NET 数据后处理工具集(Trim/Schema/映射/落库零分配完整实现)

DataTable 用得多了就会发现,所有项目都在重复这些操作:去空行、Trim 字符串、列名/索引互查、Schema 克隆、DataRow 转 Dictionary、ToSortedTable、FirtRowToColumnName。本文基于 SwitchData 项目中真实在用的 DataTableExtensions(1700+ 行),把高频数据后处理操作整理成统一的扩展方法工具集,涵盖倒序遍历、Span 零分配清洗、CloneSchema/CopyData 投影、SplitColumn/MergeColumns/FillDownColumns 复杂业务转换等完整实现。

从零实现轻量级 ADO.NET ORM:特性驱动 + Expression Tree 委托 + 多级 ConcurrentDictionary 缓存完整架构

本文带你拆解一个生产环境真实在用的轻量级 ADO.NET ORM 框架。它基于特性驱动实体映射,用 Expression Tree 动态编译 Getter/Setter 委托实现零反射开销,并通过 MetadataCache、SchemaCache、CachingMechanism 三级 ConcurrentDictionary 缓存体系保证性能与线程安全。整个框架零外部依赖,代码量不过千行,却完整实现了 Dapper 的核心能力。

ConcurrentDictionary + record struct 组合键:.NET ORM 零分配缓存三层设计实战

手写 ORM 或数据库抽象层时,缓存是性能关键。本文从 SwitchData 项目提取一套生产级缓存方案:用 record struct 做零 GC 组合键,ConcurrentDictionary 做线程安全容器,CacheKey 包含 ConnectionString 防止串库,命中缓存时必须 Clone 可变对象(DbParameter、DataTable、List)避免被业务代码污染。四句话总结一套可直接抄过去的 ORM 缓存基础设施。

C# LINQ 表达式树深度解析:手写 ORM 如何把 Where/OrderBy 翻译成数据库查询条件

EF Core 是怎么把 LINQ 翻译成 SQL 的?答案是表达式树。本文从 SwitchData 项目中 462 行的 ExpressionParser 真实代码出发,展示手写 ORM 如何把 Where/OrderBy Lambda 翻译成结构化 QueryCondition 列表:排序解析沿方法调用链向内剥离,条件解析基于 ExpressionVisitor 深度优先遍历并还原括号语义,还包含闭包变量提取、string.Contains 转 LIKE、PredicateBuilder 动态组合等核心难点的完整实现。

C# 工厂策略模式 + Channel 管道:从零构建多格式日志解析架构

在多厂商多格式网元日志解析场景下,传统的 if/else 分支写法难以维护。本文以 SwitchData 项目为实战案例,拆解一套工厂策略模式 + Channel 异步管道 + ADO.NET 批量入库的完整架构,从接口抽象、工厂分发、Channel 背压、批量 Flush 等关键设计点入手,带你看约 500 行核心代码如何支撑百万级日志解析流水线稳定运行两年多。

手写轻量级 ORM 实战:Database 抽象层 + MetadataCache 表达式树编译 + 三级缓存完整实现

本文从 SwitchData 项目源码出发,手把手拆解一个约 2000 行代码的手写轻量级 ORM 框架。核心组件包括 Database 抽象基类(Provider 模式 + 模板方法)、MetadataCache 元数据驱动(反射扫描 + 表达式树编译高性能 Getter/Setter)、ObjectMapper 对象映射、SqlDatabase 泛型 CRUD,以及 ParameterCache、SchemaCache、MetadataCache 三级缓存机制。

C# Channel 实战:高性能生产者-消费者数据管道(IAsyncEnumerable + Batch BulkCopy + CancellationToken 完整实现)

在处理百万级数据导入场景时,传统同步流水线让数据库成为瓶颈。本文结合 SwitchData 项目中的语音专线数据同步实战,展示如何用 .NET 8 的 System.Threading.Channels 构建生产者-消费者并行管道:一个异步任务负责从数据库逐条读取+聚合去重,另一个任务负责批量 BulkCopy 入库,两者通过有界 Channel 解耦,吞吐提升 3.6 倍。

ASP.NET Core System.Text.Json 自定义 Converter 实战:DateTime 格式化 + DataTable 双序列化器桥接

ASP.NET Core 默认使用 System.Text.Json 做 JSON 序列化,但日期格式化、字符串 Trim、DataTable 桥接这些常见需求需要自己实现 Converter。本文基于 SwitchData 项目,从 DateTimeJsonConverter、TrimStringJsonConverter 到 DataTableJsonConverter,再到 JsonConverterFactory 消除重复、JsonHelper 统一双序列化器入口,手把手实现一套完整的自定义 Converter 体系。