Dapper.NET源码中哪些部分可以深入探究?
摘要:目录 前言、目录、安装环境 Dynamic Query 原理 Part1 Dynamic Query 原理 Part2 Strongly Typed Mapping 原理 Part1 : ADO.NET对比Dapper Strongly T
目录
前言、目录、安装环境
Dynamic Query 原理 Part1
Dynamic Query 原理 Part2
Strongly Typed Mapping 原理 Part1 : ADO.NET对比Dapper
Strongly Typed Mapping 原理 Part2 : Reflection版本
Strongly Typed Mapping 原理 Part3 : 动态建立方法重要概念「结果反推程式码」优化效率
Strongly Typed Mapping 原理 Part4 : Expression版本
Strongly Typed Mapping 原理 Part5 : Emit IL反建立C#代码
Strongly Typed Mapping 原理 Part6 : Emit版本
Dapper 效率快关键之一 : Cache 缓存原理
错误SQL字串拼接方式,会导致效率慢、内存泄漏
Dapper SQL正确字串拼接方式 : Literal Replacement
Query Multi Mapping 使用方式
Query Multi Mapping 底层原理
QueryMultiple 底层原理
TypeHandler 自订Mapping逻辑使用、底层逻辑
CommandBehavior的细节处理
Parameter 参数化底层原理
IN 多集合参数化底层原理
DynamicParameter 底层原理、自订实作
单次、多次 Execute 底层原理
ExecuteScalar应用
总结
1.前言、目录、安装环境
经过业界前辈、StackOverflow多年推广,「Dapper搭配Entity Framework」成为一种功能强大的组合,它满足「安全、方便、高效、好维护」需求。
但目前中文网路文章,虽然有很多关于Dapper的文章但都停留在如何使用,没人系统性解说底层原理。所以有了此篇「深入Dapper源码」想带大家进入Dapper底层,了解Dapper的精美细节设计、高效原理,并学起来实际应用在工作当中。
建立Dapper Debug环境
到Dapper Github 首页 Clone最新版本到自己本机端
建立.NET Core Console专案
需要安装NuGet SqlClient套件、添加Dapper Project Reference
下中断点运行就可以Runtime查看逻辑
个人环境
数据库 : MSSQLLocalDB
Visaul Studio版本 : 2019
LINQ Pad 5 版本
Dapper版本 : V2.0.30
反编译 : ILSpy
2.Dynamic Query 原理 Part1
在前期开发阶段因为表格结构还在调整阶段,或是不值得额外宣告类别轻量需求,使用Dapper dynamic Query可以节省下来回修改class属性的时间。当表格稳定下来后使用POCO生成器快速生成Class转成强型别维护。
为何Dapper可以如此方便,支援dynamic?
追溯Query方法源码可以发现两个重点
实体类别其实是DapperRow再隐性转型为dynamic。
DapperRow继承IDynamicMetaObjectProvider并且实作对应方法。
此段逻辑我这边做一个简化版本的Dapper dynamic Query让读者了解转换逻辑 :
建立dynamic类别变量,实体类别是ExpandoObject
因为有继承关系可以转型为IDictionary<string, object>
使用DataReader使用GetName取得栏位名称,借由栏位index取得值,并将两者分别添加进Dictionary当作key跟value。
