【问题标题】:How to use SQL Server OFFSET & FETCH FIRST with Entity Framework 5?如何在 Entity Framework 5 中使用 SQL Server OFFSET 和 FETCH FIRST?
【发布时间】: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%

【问题讨论】:

标签: c# entity-framework linq-to-sql sql-server-2012


【解决方案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

【讨论】:

    猜你喜欢
    • 2011-12-24
    • 2015-09-07
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    相关资源
    最近更新 更多