实体框架 LINQ To Entities 生成奇怪的慢速 SQLWhere 子句

2024-04-28

我需要理解这一点。 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(使用前将#替换为@)

实体框架 LINQ To Entities 生成奇怪的慢速 SQLWhere 子句 的相关文章

  • 如何在运行时添加到 TreeView 目录

    我有一个TreeView我想允许用户添加和删除子项目 在探索基本功能时 我使用button and a textbox添加此子项 当用户点击button a new TreeViewItem需要创建并设置为我的父项的子项TreeView与t
  • Roslyn SyntaxNode 是否被重用?

    我一直在看罗斯林CTP http msdn microsoft com en us roslyn并且 虽然它解决了类似的问题表达式树API http msdn microsoft com en us library bb397951 asp
  • 同一配置文件上的两个不同提供程序

    我在用着实体框架 6 1 0 I have 2 家提供者 MysqlClient 和 SQLServerCE 我需要创建2个不同的DBContext 这迫使我创造2个配置类因为mysql有一些不同的东西 但是当我初始化应用程序时 Datab
  • 如何正确初始化“min”变量?

    我的代码中有一个小问题 用于从一系列数字中查找最小值 当我初始化时min 0 最小值结果为0 但是当我不初始化时min 答案是正确的 为什么会出现这种情况 Xcode 告诉我应该初始化min多变的 int a 20 0 int max 0
  • 无法将 MVC 4 部署到服务器

    我的 Web 应用程序只是一个用 VS 2010 MVC 4 制作的简单 Web 应用程序 没有任何外部代码 它只是 VS 2010 的默认应用程序 我有 Plesk 的豪华 Windows 托管 我从未更改过帐户中的任何功能 我将所有文件
  • 使用 Unity 如何将命名依赖项注入构造函数?

    我有IRespository在以下代码中注册了两次 带有名称 Setup the Client Repository IOC Container RegisterType
  • 条件运算符 + 向上转换 + const 引用

    灵感来自这个问题 https stackoverflow com questions 23049166 我尝试了以下代码 struct A virtual void doit const 0 struct B public A virtua
  • 编写/使用 C++ 库

    我正在寻找有关以下内容的基本示例 教程 如何用 C 编写 编译库 soLinux 的文件 dllWindows 文件 如何在其他代码中导入和使用这些库 The code r cc include t h int main f return
  • 结构对类型大小的贡献

    我想知道为什么有以下两种类型 struct double re 2 and double re 2 C 中的大小相同吗 struct 不会增加一点大小开销吗 不 它只是将所有元素组合成一个更高级别的元素 其大小只是各个元素大小的总和 加上一
  • 从数据库和文件系统中删除文件

    我有一个表引用我们网络上共享位置中的文件 将文件路径存储在数据库中 我有一个按钮需要从数据库中删除记录并从文件系统中删除文件 foreach var report in reports string filePath report Repo
  • 如何获取正在访问 ASP.NET 应用程序的当前用户?

    为了获取系统中当前登录的用户 我使用以下代码 string opl System Security Principal WindowsIdentity GetCurrent Name ToString 我正在开发一个 ASP NET 应用程
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 使用间隔阈值对不同的连续时间戳记录进行分组

    我有一系列间歇性间隔的带有时间戳的 GPS 坐标 我正在使用 PostGIS 将它们渲染到地图画布上 为了渲染它们 需要使用 PostGIS 中的 ST MakeLine 聚合函数将点聚合成线 从而在地图上留下 GPS 数据丢失的间隙 数据
  • 在 postgres 查询中使用列表

    我有一个动态列表 list a b c d 所以长度可能会改变 我想在查询中比较这些列表值 select from student where name in all the list values 我想将列表值传递到此查询中 我怎样才能做
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • SQL - != 'NULL' 的解释

    我的SSMS代码如下 Select top 50 From FilteredContact Where statuscode 1 and emailaddress1 NULL and telephone1 NULL and address1
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t

随机推荐