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.
我相信这与Entity Framework中的NULL比较设置有关
在查询之前添加以下代码,以查看它是否有助于您的查询性能:
context.ContextOptions.UseCSharpNullComparisonBehavior = true;
Run Code Online (Sandbox Code Playgroud)