【发布时间】:2021-06-23 18:20:38
【问题描述】:
我一直在观看 Brent Ozar 的培训视频(我的 SQL Guru),他谈到参数嗅探并说 EF 会这样做,但对于我的生活,我无法获得一个有效的示例。我期待看到参数,但它只是用相等而不是@p1,@p2 创建这样的 SQL。
SELECT [p].[Id], [p].[Body], [p0].[Type]
FROM [Posts] AS [p]
INNER JOIN [PostTypes] AS [p0] ON [p].[PostTypeId] = [p0].[Id]
WHERE ([p].[PostTypeId] = 6) AND ([p].[CreationDate] >= '2011-01-01T00:00:00.000')
我通过搭建他的 StackOverflow2013 数据库创建了 DBContext,并在帖子类型上创建了一个外键以获得某种 JOIN。
有谁知道我如何获得使用 EF 进行参数嗅探的示例,因为这每次都会创建一个新的查询计划?
如果我调用存储过程,那么我可以获取参数嗅探。
我的C#代码如下
var result = ctx.Posts
.Include(x => x.PostType)
.Where(x => x.PostTypeId == 6 && x.CreationDate >= new DateTime(2013, 01, 01))
.Select(x => new {
Id = x.Id,
Body = x.Body,
Type = x.PostType.Type
}).ToList();
【问题讨论】:
-
使用变量,而不是值。
-
Haaaaa 刚试过,是的,就是这样,神奇的是知道它是一个变量而不是一个值
标签: c# sql-server entity-framework-core parameter-sniffing