SQL Server 2012 引入了一种更有效的分页机制,用于使用 FETCH 和 OFFSET 进行分页,这可能会对使用大量分页的应用程序的性能产生重大影响。Entity Framework 5 支持这个吗?因此,如果我使用 EF 使用 Take + Skip 进行分页,如果 EF 以 SQL Server 2012 为目标,LINQ 查询是否会被转换为新的 2012 TSQL?
问问题
3087 次
2 回答
11
正如@Ladislav 所说,EF 5 不支持 OFFSET & FETCH。话虽如此,我想补充一点观点。我不认为这应该很重要。
当您购买像实体框架这样的 ORM 时,您将外包查询生成(出于完全正当的理由)。EF 是使用“旧” CTE
样式查询Row_Number()
还是新Fetch
/Offset
是一个实现细节。Microsoft 可以随时更新 EF 代码并将查询生成更改为使用其中一种。
如果您想控制查询生成,您可以:
- 使用 EF 的“存储过程映射”功能
- 直接在 EF 中使用存储过程(我经常这样做)
- 自己编写 ADO/SQL,或者
- 使用更有限的微观结构,如大规模/PetaPoco
那么这有关系吗?
好吧,对于编写查询的开发人员来说,新语法将是一种可喜的解脱。另一方面,旧 CTE 方法和新语法之间似乎没有真正的性能差异。所以从 EF 的角度来看 - 不是真的。我们使用 EF 会产生很大的开销,分页方法可能不会成为您的断点。
于 2012-04-24T20:46:15.457 回答
9
EF 5 不支持此功能 - 实际上我认为 EF 中没有任何 SQL Serve 2012 功能可用。您可以在Data UserVoice上投票支持此功能,以便在 ADO.NET 团队产品积压中将其提升。
于 2012-04-20T11:31:42.283 回答