我需要理解这一点。
EF5.0 和 EF6.* 在 TSQL 代码生成方面存在很大差异
在我的代码中,这是我的 LINQ - 语句
var qry2 = context.viw_overview_1.Where(i => i.article_EAN17 == ean).Select(i => i.article_id).Take(200);
实体框架5.0只生成一个简单快速的 TSQL WHERE - 像这样的语句,这是完美的
... WHERE [Extent1].[article_EAN17] = @p__linq__0
00.0960096ms in SSMS
but 实体框架 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 语句?
我试过字符串.Equals() , 字符串.Compare(),交换参数,但没有任何改变。
为什么实体框架 6 会为简单查找生成复杂的 SQL 查询? https://stackoverflow.com/questions/20107016/why-entity-framework-6-generates-complex-sql-queries-for-simple-lookup解释一下区别,但是有没有办法强制 EF 生成简单的 SQL。
我相信这与您在实体框架中的 NULL 比较设置有关
在查询之前添加以下代码,看看它是否有助于您的查询性能:
context.ContextOptions.UseCSharpNullComparisonBehavior = true;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)