10

SQL Server 2012 中引入的OFFSET&关键字在和 Linq to SQL中是否支持?FETCH FIRSTEntityFramework 5

使用SELECT * FROM tables ORDER BY stime DESC OFFSET 0 ROWS FETCH FIRST 10 ROWS ONLY代替时,它显示出 50% 的性能提升var a= db.table.Skip(0).Take(10);

4

1 回答 1

3

简短的回答是否定的,它在 EF5 中不受支持,但 Entity Framework 的 6.1.2 版刚刚发布,如ADO.NET 博客中所述。6.1.2 中的一项新功能是支持 OFFSET..FETCH SQL Server 2012+ 分页语法。

当您购买像实体框架这样的 ORM 时,您将外包查询生成(出于完全正当的理由)。EF 是否使用带有 Row_Number() 的“旧”CTE 样式查询或更新的 Fetch / Offset 是一个实现细节。Microsoft 可以随时更新 EF 代码并将查询生成更改为使用其中一种。参考

如果您想控制查询生成,您可以:

使用 EF 的“存储过程映射”能力 直接在 EF 中使用存储过程(我经常这样做)自己编写 ADO/SQL,或者使用更有限的微观结构,如 mass/PetaPoco 那么这有关系吗?

好吧,对于编写查询的开发人员来说,新语法将是一种可喜的解脱。另一方面,旧 CTE 方法和新语法之间似乎没有真正的性能差异。所以从 EF 的角度来看 - 不是真的。我们使用 EF 会产生很大的开销,分页方法可能不会成为您的断点。 重发

于 2015-05-20T05:56:08.653 回答