Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 左连接是否排除EF6查询计划缓存?_C#_Entity Framework_Linq - Fatal编程技术网

C# 左连接是否排除EF6查询计划缓存?

C# 左连接是否排除EF6查询计划缓存?,c#,entity-framework,linq,C#,Entity Framework,Linq,关于EF性能的注意事项指出: Skip()、Take()、Contains()和DefautIfEmpty()LINQ运算符 不使用参数生成SQL查询,而是将值 作为常量传递给它们。因此,查询可能 否则,相同的结果会污染查询计划缓存,并且 EF堆栈和在数据库服务器上,不会重新使用 除非在后续查询执行中使用相同的常量 我主要使用DefaultIfEmpty作为获取EF以生成左连接查询的方法。这是否意味着使用DefaultIfEmpty()的任何包含手动左连接(EF还将为某些导航属性使用生成左连接)

关于EF性能的注意事项指出:

Skip()、Take()、Contains()和DefautIfEmpty()LINQ运算符 不使用参数生成SQL查询,而是将值 作为常量传递给它们。因此,查询可能 否则,相同的结果会污染查询计划缓存,并且 EF堆栈和在数据库服务器上,不会重新使用 除非在后续查询执行中使用相同的常量


我主要使用
DefaultIfEmpty
作为获取EF以生成左连接查询的方法。这是否意味着使用DefaultIfEmpty()的任何包含手动左连接(EF还将为某些导航属性使用生成左连接)的查询都不会从缓存中受益?有什么解决方法吗?

…除非在后续查询执行中使用相同的常量。
,我怀疑您在查询中使用了相同的常量。@RobertMcKee很好。我读得不够仔细。我想我必须继续挖掘,以发现为什么我的查询没有缓存!如果你把这个作为答案,我会接受的。你知道查询计划缓存只是缓存计划,而不是结果,对吗?您如何确定查询计划没有被缓存?@RobertMcKee是的,我意识到了这一点。我可以通过使用DbInterception来计时执行LINQ查询和准备就绪的DbCommand之间的时间差来判断是否正在缓存它。对于缓存,这通常是几毫秒。在没有缓存的情况下,在我们的系统中,一个特定的查询最多需要3秒钟