将存储过程与 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 一起使用有啥缺点吗?的主要内容,如果未能解决你的问题,请参考以下文章

将 Dapper 与 SQL Server 一起使用

使用NSUserDefault存储大量数据有啥缺点

直接将 AWS ELB 与 Gunicorn 一起使用(没有 nginx)有啥缺点?

存储过程跟SQL语句比较,各有啥优点和缺点?

如何使用 Dapper 实现工作单元模式?

spring-data-jpa和mybatis可以整合在一起使用有啥优缺点