将存储过程与 Dapper 一起使用有啥缺点吗?
Posted
技术标签:
【中文标题】将存储过程与 Dapper 一起使用有啥缺点吗?【英文标题】:Are there any disadvantage to use stored procedures with Dapper?将存储过程与 Dapper 一起使用有什么缺点吗? 【发布时间】:2016-09-29 06:19:17 【问题描述】:我最近开始了解名为 Dapper 的微型 ORM。我们通常严重依赖 MSSQL 数据库中的存储过程,以避免 T-SQL 与我们的 C# 代码混淆。
您在使用 Dapper 和存储过程方面有何经验? Dapper 是否需要内联 T-SQL 才能充分利用 Dappers 的所有优势\功能?
【问题讨论】:
【参考方案1】:您在使用 Dapper 和存储过程方面有何经验?
Dapper 最终是一个对象映射器,它在内部使用ADO.Net
API 工作,虽然它缓存某些数据结构以使查询更快,但它与存储过程一起工作效率很高。
Dapper 是否需要内联 T-SQL 才能充分利用 Dappers 的所有优势\功能?
不,事实上存储过程是预编译的,因此与 Sql 文本查询不同,每个请求都没有硬解析范围,因为最佳执行计划已经缓存在 Sql Server 中。
简而言之,存储过程确实是用于 dapper 和 SQl 服务器组合的理想机制:
性能 简洁一致的代码 执行复杂的数据库操作,例如使用 TVP,它可以在单个调用中获取大量数据并使用它而不是多个网络请求 uisng 文本查询【讨论】:
Marc Gravell 说 Dapper 在此答案中没有任何映射层 ***.com/a/9518214/294242 但我想映射功能自 2012 年以来已经实施,这是他发布该答案的日期......什么是电视节目主持人? @JonasAxelsson 您误解了 Marc 的回答,问题说如果您指定一个实体并且数据库结果具有不同的列名集,它将如何映射? Marc 说,没有选项,事实上即使现在默认也没有选项,需要使用其中一个扩展来进行映射,它会覆盖默认的 Sql 映射器,其唯一目的是从 Sql 映射具有相同名称的列结果。这并没有消除 Dapper 是一个对象映射器这一事实,因为它会导致IEnumerable<T>
与您的问题无关:)
在 Dapper 中使用存储过程确实是许多企业系统使用的标准机制以上是关于将存储过程与 Dapper 一起使用有啥缺点吗?的主要内容,如果未能解决你的问题,请参考以下文章