实体框架SQL查询未返回正确的数据

问题描述:

我正在使用EF6并使用投影进行查询。我从代码中得到了一个问题here:实体框架SQL查询未返回正确的数据

这段代码很完美,但是它产生了超过1200行的SQL,并且在第一次调用时,编译查询需要花费5秒以上的时间,并且执行它需要300ms不能接受的。你可以看到我的意思here:

我使用Glimpse来查看它正在生成的SQL,并有趣地注意到,如果我删除注释,SQL将下降到只有200行代码。

我决定将SQL放入存储过程中,尽管它正确地返回了发布数据,但未填充PostAuthor。

我仔细检查了与LINQ查询它填充,但使用

_context.Posts.SqlQuery(...) 

不被填充PostAuthor对象。

我还在SQL Server Management Studio中检查了原始SQL查询,并且所有数据都正在返回,它只是在返回时未被填充。

我错过了什么吗?这是一个已知的问题?

+1

您可能需要显示一些代码才能提供帮助。什么是您正在使用的C#LINQ查询?在Glimpse中生成的查询的SQL是什么?您的替代解决方案中的点是什么? –

+0

如果我记得正确(因为我没有使用存储过程),这是一个基于我读过的其他线程的已知问题。 –

试试这个:

var allposts = _context.Posts 
    .Include(p=>p.Comments) 
    .Include(p=>p.Attachments) 
    .Where(t => t.PostAuthor.Id == postAuthorId) 
    .ToList(); 

当然,张贴SQL能确定是否有可能是检索数据,以及更好的方法帮助。

+0

感谢您的答案,不幸的是我只需要与特定的发件人和附件与特定的所有者只能得到意见,所以我不能使用这个。这是我的另一个问题的基础, – grayson

+0

它是否比上述更快? –