如何在 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 中引入的 OFFSET
和 FETCH 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