Sql server 实体框架与SQL Server 2000(应用运算符)问题
我在下面有一个简单的Linq查询: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操作符而不是子查询
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。要解决此问题,请执行以下操作:
ProviderManifestToken
是的,我在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。。。