SuperAPI AI 工具集

dotnet-data-access-strategy

数据与分析

查看项目

更新于 10-16 01:11

技能介绍

用途:在编写数据访问代码前,为 .NET 应用选择 EF Core、Dapper 或原生 ADO.NET 提供决策框架,覆盖性能权衡、功能对比、AOT/裁剪兼容性、混合方案与迁移路径。

主要能力:给出决策矩阵(学习曲线、生产力、查询性能、启动时间、内存分配、AOT/裁剪、变更跟踪、迁移、LINQ、批量操作、复杂映射);分别说明何时选 EF Core(标准 CRUD、变更跟踪、代码管理迁移、偏好 LINQ、.NET Aspire 集成)、Dapper(性能关键、复杂查询、薄抽象、需 AOT 时用 Dapper.AOT)、原生 ADO.NET(极致性能、完全控制连接与读取器、构建库、必须 AOT、存储过程或数据库特有功能);提供相对性能对比(以 ADO.NET 为 1x,Dapper 约 1.05–1.1x,EF Core NoTracking 约 1.3–1.4x,Tracking 约 1.5–2x,实际受查询复杂度、数据库、网络延迟与硬件影响);说明 AOT 与裁剪兼容性:EF Core 依赖反射,AOT 支持部分且随版本变化,可用编译模型 dotnet ef dbcontext optimize 改善启动与裁剪友好度;Dapper 标准版使用 Reflection.Emit 不兼容 AOT,Dapper.AOT 通过源生成器兼容;原生 ADO.NET 完全支持。

使用方式:混合方案中 EF Core 负责命令与变更跟踪,Dapper 负责复杂只读查询,二者可共享连接与事务,通过 DbContext.Database.GetDbConnection() 获取底层连接、transaction.GetDbTransaction() 共享事务;PostgreSQL 场景用 AddNpgsqlDataSource() 注册 NpgsqlDataSource 单例以管理连接池,并可与 UseNpgsql() 集成。迁移路径包括 ADO.NET→Dapper 增量替换、Dapper→EF Core 用 dotnet ef dbcontext scaffold 生成初始迁移、EF Core→Dapper 针对性能热点替换。

适用场景与限制:适合在选型阶段做技术决策;不覆盖 EF Core 战术用法、战略架构、DI 机制、异步模式、数据访问层测试与 CI/CD 管道。性能数字为粗略相对值,需按实际负载测量;EF Core AOT 支持不完整,AOT 关键路径应准备 Dapper.AOT 或 ADO.NET 回退;不要仅凭性能推荐 Dapper,先用 AsNoTracking() 与 Select() 投影验证;AOT 发布勿用标准 Dapper;勿手动创建 NpgsqlConnection;勿在同一逻辑事务中混用不同连接;注意 LINQ 表达式可能无法翻译为 SQL。