如何在 Entity Framework 5 中使用 SQL Server OFFSET 和 FETCH FIRST?

Posted

技术标签:

【中文标题】如何在 Entity Framework 5 中使用 SQL Server OFFSET 和 FETCH FIRST?【英文标题】:How to use SQL Server OFFSET & FETCH FIRST with Entity Framework 5? 【发布时间】:2013-08-22 06:55:43 【问题描述】:

EntityFramework 5 和 Linq to SQL 是否支持 SQL Server 2012 中引入的 OFFSETFETCH FIRST 关键字?

当使用 SELECT * FROM tables ORDER BY stime DESC OFFSET 0 ROWS FETCH FIRST 10 ROWS ONLY 而不是 var a= db.table.Skip(0).Take(10); 时,性能提升了 50%

【问题讨论】:

EntityFramework(包括6个)尚不支持。 您可以在这里为该功能投票:entityframework.codeplex.com/workitem/961 实际上,正如我所见,该功能已经提交给 EF 源代码控制entityframework.codeplex.com/SourceControl/network/forks/… 任何使用该功能的人都应确保始终获得总订单,请参阅:***.com/questions/40766097/… 【参考方案1】:

简短的回答是不,它在 EF5 中不受支持,但 Entity Framework 的 6.1.2 版刚刚发布,为 noted on the ADO.NET blog。 6.1.2 中的一项新功能是支持 OFFSET..FETCH SQL Server 2012+ 分页语法。

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

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

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

嗯,对于编写查询的开发人员来说,新语法将是 欢迎救济。另一方面,似乎没有 旧 CTE 方法和新方法之间的实际性能差异 句法。所以从 EF 的角度来看 - 不是真的。我们招致重大 使用 EF 的开销,分页的方法可能不会是你的休息 观点。 Refrance

【讨论】:

以上是关于如何在 Entity Framework 5 中使用 SQL Server OFFSET 和 FETCH FIRST?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Entity Framework 5 中使用 SQL Server OFFSET 和 FETCH FIRST?

如何在 ASP.NET 5 中将 Entity Framework 6 与 MySQL 一起使用?

如何关闭 Entity Framework Core 5 中的所有约定

如何在MVC 5的类库项目中使用Entity Framework 6 Code First

如何使用 Entity Framework ASP.Net MVC 5 删除多条记录? [关闭]

如何在 ASP.NET MVC 5、Entity Framework 6 中使用流利的 API 映射表?