1
我试图让实体框架性能的句柄,特别是围绕动态SQL就会产生。以下面的语句为例:实体框架的SQL查询性能
var orders = db.Orders.Include(o => o.OrderItem).Include(o => o.Customer);
这将返回所有订单附加的订单项目和订购它的用户的客户详细信息。
这将大致转换到SQL,如下面:
Select *
from Order o
inner join OrderItem oi on o.OrderId = oi.OrderId
inner join Customer c on o.CustomerId = c.CustomerId
现在(在SQL Server的情况下),这个计划可以被缓存和这个例子很简单,但作为查询变得越来越动态和复杂的参数,条件,变量等等,数据库性能会成为EF的问题,并且将使用编译或其他对象的存储过程,而不是让EF生成动态SQL变得更高效?
或者我们可以假设EF是高度优化的,除了复杂场景中数据库级别需要SPROCS,视图,函数等的场景外,我们可以依靠EF在其SQL查询中尽可能高效? EF的SQL代码
欢迎StackOverflow上:如果您发布的代码,XML或数据样本,** **请在高亮文本编辑器的线和编辑器工具栏上单击“代码示例”按钮('{}')很好地格式和语法突出显示它! –
只是两点意见:首先,EF已经被广泛的测试,和它背后的人真正了解SQL Server和如何构建高效的查询,所以对于绝大多数的EF查询,会随着你会写什么好你自己 - 或更好。其次,EF使用参数化查询,所以如果相同的查询再次出现,只需使用不同的参数值,就可以重新使用缓存的执行计划 –