Stored procedures 将存储过程与Dapper一起使用有什么缺点吗?

Stored procedures 将存储过程与Dapper一起使用有什么缺点吗?,stored-procedures,dapper,Stored Procedures,Dapper,我很高兴最近开始学习名为的微型ORM。我们通常严重依赖MSSQL数据库中的存储过程,以避免T-SQL与C#代码混淆 您对简洁和存储过程有何经验?Dapper是否需要内联T-SQL来充分利用Dapper的所有优点\功能 您对简洁和存储过程有何经验 Dapper最终是一个对象映射器,它在内部使用ADO.NetAPI工作,虽然它确实缓存某些数据结构以加快查询速度,但它在存储过程中的工作效率相当高 Dapper是否需要内联T-SQL来充分利用Dapper的所有优点\功能 不,事实上,由于存储过程是预编译

我很高兴最近开始学习名为的微型ORM。我们通常严重依赖MSSQL数据库中的存储过程,以避免T-SQL与C#代码混淆

您对简洁和存储过程有何经验?Dapper是否需要内联T-SQL来充分利用Dapper的所有优点\功能

您对简洁和存储过程有何经验

Dapper最终是一个对象映射器,它在内部使用
ADO.Net
API工作,虽然它确实缓存某些数据结构以加快查询速度,但它在存储过程中的工作效率相当高

Dapper是否需要内联T-SQL来充分利用Dapper的所有优点\功能

不,事实上,由于存储过程是预编译的,所以与Sql文本查询不同,每个请求都没有硬解析的范围,因为最佳执行计划已经缓存在Sql Server中

简言之,存储过程确实是用于dapper和SQl server组合的理想机制,用于:

  • 演出
  • 干净一致的代码
  • 执行复杂的数据库操作,如使用TVP,它可以在一次调用中获取大量数据,并使用它,而不是使用文本查询的多个网络请求

Marc Gravell说Dapper在这个答案中没有任何映射层,但我猜映射功能是从2012年开始实施的,2012年是他发布答案的日期。。。什么是TVP?@JonasAxelsson您误解了Marc的答案,问题是如果您指定一个实体,并且数据库结果具有不同的列名集,它将如何映射?Marc说,没有选项,事实上,即使现在默认情况下也没有选项,需要使用其中一个扩展来进行映射,这会覆盖默认的Sql映射器,其唯一目的是从Sql结果映射同名的列。这并没有消除Dapper是对象映射器这一事实,因为它会导致
IEnumerable
,与您的问题无关:)将存储过程与Dapper一起使用确实是许多企业系统使用的标准机制