【发布时间】:2018-09-10 09:43:52
【问题描述】:
如果我有非常资源密集的 SQL 查询要写入数据库以获取数据。是否建议使用实体框架通过存储过程调用来获取数据,还是我们应该坚持使用 ADO.NET
【问题讨论】:
-
EF 可用于运行任意 SQL 查询(并将对任何结果进行行集到对象映射):所以你可以。
标签: .net entity-framework stored-procedures ado.net
如果我有非常资源密集的 SQL 查询要写入数据库以获取数据。是否建议使用实体框架通过存储过程调用来获取数据,还是我们应该坚持使用 ADO.NET
【问题讨论】:
标签: .net entity-framework stored-procedures ado.net
SQL 脚本就是一个 SQL 脚本,无论它是由什么人编写或生成的。如果您使用最佳代码实现存储过程,那么它将执行良好。如果您的脚本中有浪费的、不需要的操作,那么它的性能将不会很好。如果脚本是使用 Entity Framework 生成的并且运行良好,那么您在使用它时不会有任何问题。如果它不是那么好,那么你需要一个存储过程才能获得良好的性能。
当您怀疑Entity Framework生成的脚本是否执行良好时,您将需要执行以下步骤:
我很长一段时间没有使用 .NET 和 EF,但据我记得,在许多情况下,它倾向于一个接一个地收集记录,为每个记录执行单独的查询,即使它们可以由单个查询收集,这大大增加了复杂性。
因此,简而言之,EF 在许多情况下都表现良好,但如果您遇到缓慢,那么您需要找出其原因,如上所述。当单个脚本可以返回所有需要的 n 条记录时,您将需要检查生成的脚本以查看它是否编写了 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 Data Provider 与使用标准 ADO.Net 的数据库进行通信
所以你的问题的答案是:它不会改变计算的功耗。
查看 EF 架构图。 EF Overview
【讨论】: