首页 > 解决方案 > WHERE 子句中的 EF 硬编码值很快,字符串参数很慢

问题描述

当我在我的 EF Where 子句中设置一个字符串变量时,我遇到了一个非常慢的性能,当我在 where 子句中硬编码字符串值时,我遇到了非常快的性能。

C#、.Net 框架 4.7.1、EF 6.2

50毫秒

db.Dealers.Where(x => x.SourceDealerId == "000111222fff333q");

1.5秒

var parameter = "000111222fff333q";
db.Dealers.Where(x => x.SourceDealerId== parameter );

DealerId 在数据库中属于 Char(18) 类型,并且可以为空。方法是数据库优先。以下是经销商列的属性: 在此处输入图像描述

两种情况下生成的 SQL 有所不同。对于快速案例:...WHERE dealerId = '000111222fff333q'

对于慢速情况:

在此处输入图像描述

标签: c#entity-framework

解决方案


这可能与实体框架中的 NULL 比较设置有关

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

context.ContextOptions.UseCSharpNullComparisonBehavior = false;

推荐阅读