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。
阅读全文