【问题标题】:Skip and Take is generating exception in Entity FrameworkSkip and Take 在实体框架中生成异常
【发布时间】:2017-04-10 12:02:18
【问题描述】:

在执行以下查询时,我在 InnerException 中收到错误

{"'OFFSET' 附近的语法不正确。 FETCH 语句中选项 NEXT 的使用无效。 关键字“AS”附近的语法不正确。 'OFFSET' 附近的语法不正确。 FETCH 语句中选项 NEXT 的使用无效。 关键字“AS”附近的语法不正确。 'OFFSET' 附近的语法不正确。 FETCH 语句中选项 NEXT 的使用无效。 关键字 'AS' 附近的语法不正确。"}

C#代码:

var db = new DigilibEntities();

List<title> titles = new List<title>();

titles = db.titles
  .Include("themes")
  .Include("subjects")
  .Include("grades")
  .Where(x => x.themes.Count() == 0 || 
              x.subjects.Count() == 0 || 
              x.grades.Count() == 0)
  .OrderBy(x => x.id)
  .Skip(10)
  .Take(10)
  .ToList();

【问题讨论】:

  • 仅供参考,您不需要将 titles 设置为一个空列表,当您将其设置为查询结果时,它会被丢弃。
  • new List&lt;title&gt;(); 没有用List&lt;title&gt; titles = db.titles...
  • 您在这里使用哪个数据提供者?实际生成的 SQL 语句是什么?

标签: c# sql .net entity-framework linq


【解决方案1】:

默认情况下,EF 将使用 FETCH 和 OFFSET 语法进行分页。旧版本的 SQL Server 不支持此语法。您需要将 ProviderManifestToken 设置为 2008,以便 EF 生成旧的 2008 样式语法。

A breaking change in Entity Framework 6.1.2 when using EDMX and SQL Server 2008/2005

【讨论】:

  • 如果我不使用 EDMX 怎么办?
猜你喜欢
  • 2021-03-26
  • 2021-08-19
  • 2012-06-12
  • 2011-11-13
  • 1970-01-01
  • 2017-05-30
  • 2014-10-04
  • 1970-01-01
相关资源
最近更新 更多