EntityFramework LINQToEntities生成奇怪的慢TSQL Where-Clause

Rol*_*and 7 c# sql linq entity-framework

我需要了解这一点.在TSQL代码生成中,EF5.0和EF6.*之间存在很大差异

在我的代码中,这是我的LINQ - statemant

var qry2 = context.viw_overview_1.Where(i => i.article_EAN17 == ean).Select(i => i.article_id).Take(200);
Run Code Online (Sandbox Code Playgroud)

EntityFramework 5.0只生成一个简单而快速的TSQL WHERE - 这样的语句,这是完美的

... WHERE [Extent1].[article_EAN17] = @p__linq__0
00.0960096ms in SSMS
Run Code Online (Sandbox Code Playgroud)

EntityFramework 6.*生成一个复杂而缓慢的语句

... WHERE (([Extent1].[article_EAN17] = @p__linq__0) AND ( NOT ([Extent1].[article_EAN17] IS NULL OR @p__linq__0 IS NULL))) OR (([Extent1].[article_EAN17] IS NULL) AND (@p__linq__0 IS NULL))
45.3665362ms in SSMS
Run Code Online (Sandbox Code Playgroud)

字段article_EAN17也有一个索引.但是EF6.*无论如何需要很长时间来初始化,但是有没有办法在EF6中生成一个简单的WHERE语句.*带有属性或类似的东西?我尝试了string.Equals(),string.Compare (),交换参数,但没有改变.

为什么Entity Framework 6会为简单查找生成复杂的SQL查询?解释差异,但有没有办法强制EF生成简单的TSQL.

mmi*_*uva 8

我相信这与Entity Framework中的NULL比较设置有关

在查询之前添加以下代码,以查看它是否有助于您的查询性能:

context.ContextOptions.UseCSharpNullComparisonBehavior = true;
Run Code Online (Sandbox Code Playgroud)

  • 实际上它是`context.Configuration.UseDatabaseNullSemantics = true;`thx到MattC (3认同)