为什么Entity Framework 6为简单查找生成复杂的SQL查询? [英] Why does Entity Framework 6 generate complex SQL queries for simple lookups?

查看:264
本文介绍了为什么Entity Framework 6为简单查找生成复杂的SQL查询?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个LINQ查询

dbContext.Customers.Where(c => c.AssetTag == assetTag).Count();

(from c in dbContext.Customers
 where c.AssetTag == assetTag
 select c).Count();

生成的SQL是

SELECT 
[GroupBy1].[A1] AS [C1]
FROM ( SELECT 
    COUNT(1) AS [A1]
    FROM [dbo].[Customer] AS [Extent1]
    WHERE (([Extent1].[AssetTag] = @p__linq__0) AND ( NOT ([Extent1].[AssetTag] IS NULL    OR @p__linq__0 IS NULL))) OR (([Extent1].[AssetTag] IS NULL) AND (@p__linq__0 IS NULL))
)  AS [GroupBy1]

那么为什么LINQ为简单的where语句生成这样复杂的SQL?

So why does LINQ generate such complex SQL for a simple where statement?

推荐答案

在EF6中,数据库为null语义是默认的比较语义。请注意,这是EF5中默认设置的更改。在EF5中,这个标志被埋在 ObjectContext.ContextOptions.UseCSharpNullComparisonBehavior ,默认情况下,EF将使用Linq对象比较语义。在EF6中,它在DbContext上显示为 DbContext.Configuration.UseDatabaseNullSemantics 。你可以找到更多的细节 here

In EF6 the database null semantics is the default comparison semantics. Note that this is a change to the default setting in EF5. In EF5 this flag was buried in ObjectContext.ContextOptions.UseCSharpNullComparisonBehavior and by default EF would use Linq to Object comparison semantics. In EF6 it is exposed on DbContext as DbContext.Configuration.UseDatabaseNullSemantics. You can find more details here

这篇关于为什么Entity Framework 6为简单查找生成复杂的SQL查询?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆