小编use*_*180的帖子

如何强制实体框架不要查询为sp_executesql

我有一个有10亿行的桌子.当我查询clausule和值是硬编码的时候(tabulka = tabulka.Where(x => x.Value.Contains("value")sql查询是作为批处理发送到sql.它花了大约5秒.当值不是硬编码(tabulka = tabulka.Where(x => x.Value.Contains(value))时,查询发送一个RPC并花了15秒.

这是EF发送给SQL(来自Profiler)的真实示例:

exec sp_executesql N'SELECT 
[GroupBy1].[A1] AS [C1]
FROM ( SELECT 
    COUNT(1) AS [A1]
    FROM [dbo].[Tabulka] AS [Extent1]
    WHERE ([Extent1].[Column] LIKE @p__linq__0 ESCAPE N''~'') AND ([Extent1].[Column] LIKE @p__linq__1 ESCAPE N''~'')
)  AS [GroupBy1]',N'@p__linq__0 nvarchar(4000),@p__linq__1 nvarchar(4000)',@p__linq__0=N'%text1%',@p__linq__1=N'%text2%'
Run Code Online (Sandbox Code Playgroud)

这需要15秒.

当我添加OPTION(RECOMPILE)时花了5秒钟:

exec sp_executesql N'SELECT 
[GroupBy1].[A1] AS [C1]
FROM ( SELECT 
    COUNT(1) AS [A1]
    FROM [dbo].[Tabulka] AS [Extent1]
    WHERE ([Extent1].[Column] LIKE @p__linq__0 ESCAPE N''~'') AND ([Extent1].[Column] LIKE @p__linq__1 ESCAPE N''~'')
)  AS [GroupBy1] …
Run Code Online (Sandbox Code Playgroud)

c#-4.0 entity-framework-5

8
推荐指数
1
解决办法
1999
查看次数

标签 统计

c#-4.0 ×1

entity-framework-5 ×1