我需要理解这一点。 在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);
EntityFramework 5.0 只生成一个简单快速的TSQL WHERE - 这样的语句,这是完美的
... WHERE [Extent1].[article_EAN17] = @p__linq__0
00.0960096ms in SSMS
但 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
字段article_EAN17也有一个索引。 但是EF6。*无论如何需要很长时间来初始化,但是有没有办法在EF6中生成一个简单的WHERE语句。*带有属性或类似的东西? 我尝试了 string.Equals(), string.Compare(),交换参数,但没有任何改变。
Why does Entity Framework 6 generate complex SQL queries for simple lookups?解释了区别,但有没有办法强制EF生成简单的TSQL。
答案 0 :(得分:8)
我认为这与Entity Framework
中的NULL比较设置有关在查询之前添加以下代码,看它是否有助于您的查询效果:
context.ContextOptions.UseCSharpNullComparisonBehavior = true;
答案 1 :(得分:1)