如果我有非常耗费资源的SQL查询要写入DB以获取数据。是否建议使用实体框架使用存储过程调用来获取数据,或者我们是否应该坚持使用ADO.NET
SQL脚本是一个SQL脚本,无论编写或生成的是什么或由谁编写。如果使用最佳代码实现存储过程,那么它将表现良好。如果您的脚本中有浪费,不需要的操作,那么它将无法正常运行。如果脚本是使用Entity Framework生成的,并且它运行良好,那么在使用它时没有任何问题。如果它不是那么好,那么如果你想获得良好的性能,你将需要一个存储过程。
当您想知道实体框架生成的脚本是否运行良好时,您需要执行以下步骤:
我很长一段时间没有使用.NET和EF,但据我记忆,在很多情况下,它往往会逐个收集记录,为每个记录执行一个单独的查询,即使它们可以通过单个查询,大大增加了复杂性。
因此,简而言之,EF在许多情况下表现良好,但如果您遇到缓慢,那么您需要找出其原因,如上所述。您将需要检查生成的脚本,以查看当单个脚本可以返回所有需要的记录时,是否写入n个脚本以获取n个记录。在这里,您可以看到收集生成的查询的方式:How do I view the SQL generated by the Entity Framework?
EntityFramework / EntityClientDataProvider的主要职责是将LINQ-to-Entities或Entity SQL查询转换为底层数据库可以理解的SQL查询。它与ADO.Net数据提供程序通信,ADO.Net数据提供程序又从数据库发送或检索数据。最后,它使用ADO.Net Data Provider使用标准ADO.Net与数据库进行通信
因此,您的问题的答案是:它不会改变计算的功耗。
看看EF架构图。 EF Overview