Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 实体框架与SQL Server 2000(应用运算符)问题_Sql Server_Linq_Entity Framework - Fatal编程技术网

Sql server 实体框架与SQL Server 2000(应用运算符)问题

Sql server 实体框架与SQL Server 2000(应用运算符)问题,sql-server,linq,entity-framework,Sql Server,Linq,Entity Framework,我在下面有一个简单的Linq查询: var seq = (from n in GetObjects() select n.SomeKey) .Distinct() .Count(); 此查询适用于SQL Server 2005及更高版本 但是,当我将EF连接到SQLServer2000时,这开始让人头疼。因为EF使用的是仅支持SQL Server 2005及以上版本的应用运算符。我不知道为什么地狱EF使用APPLy操作符而不是子查询

我在下面有一个简单的Linq查询:

var seq = (from n in GetObjects() 
          select n.SomeKey)
          .Distinct()
          .Count();
此查询适用于SQL Server 2005及更高版本

但是,当我将EF连接到SQLServer2000时,这开始让人头疼。因为EF使用的是仅支持SQL Server 2005及以上版本的应用运算符。我不知道为什么地狱EF使用APPLy操作符而不是子查询

我目前的工作是:

var seq = (from n in GetObjects() 
              select n.SomeKey)
              .Distinct()
              .ToList()
              .Count();
但是,我可以预见更多的问题。上面的查询只是一个简单的查询

有没有人遇到过这样的问题?你们是怎么解决的?或者有没有办法强制EF不使用APPLY运算符

任何帮助都将不胜感激


如何使用Lun。

问题是您根据2005(或更高)的DB生成了模型。因此,GUI设计师将2005或2008的
ProviderManifestToken
值放入EDMX。这会导致SQL Server提供程序生成针对这些版本优化的SQL。要解决此问题,请执行以下操作:

  • 右键单击EDMX文件
  • 使用XML编辑器打开
  • 搜索
    ProviderManifestToken
  • 改为2000年
  • 保存并运行

  • 是的,我在2005年开发数据库中生成了edmx。但我已将ProviderManifestToken的值更改为2000,以检查EF是否使用与SQL Server 2000兼容的查询。但是不幸的是,EF以某种方式抛出了一个异常,称APPLY运算符仅受2005年及以上版本的支持,每当我们使用涉及多表、agregation等的复杂查询时。好的,因此问题实际上与您在问题中所说的完全不同!EF没有生成错误的SQL;相反,它是说它不知道如何用SQL 2000可以处理的形式来表达查询。当您使用10年前的DB服务器时,确实会发生这些事情。EF无法神奇地使SQL 2000获得所有SQL谓词,这些SQL谓词是表示在LINQ中可以执行的任何操作所必需的。您需要更改查询或更改数据库服务器。我没有说EF生成了错误的SQL。作为一个ORM,当ProviderManifestToken设置为2000时,EF“不够聪明”(可能是故意的)不使用APPLY操作符。对许多中大型组织来说,更改数据库有时是一项不可能完成的任务。在我的情况下,没有。所以,如果你注意到我的问题,我想问的是,是否有人有办法让我在上面的查询与SQL Server 2000和EF。。。