【问题标题】:Entity Framework SQL query not returning correct data实体框架 SQL 查询未返回正确数据
【发布时间】:2015-12-02 16:36:27
【问题描述】:

我正在使用 EF6 并使用投影进行查询。我从here: 提出的问题中得到了代码

这段代码运行良好,但是它生成了超过 1200 行 SQL,并且在第一次调用时,编译查询需要 5 秒以上,执行它需要 300 毫秒,这是不可接受的。你可以明白我的意思here:

我使用 Glimpse 查看它生成的 SQL 并有趣地注意到,如果我删除 cmets,SQL 将减少到只有 200 行代码。

我决定将 SQL 放入存储过程中,虽然它正确返回了帖子数据,但 PostAuthor 没有被填充。

我仔细检查并使用 Linq 查询填充了它,但使用的是

_context.Posts.SqlQuery(...)

没有填充 PostAuthor 对象。

我还仔细检查了 SQL Server Management Studio 中的原始 SQL 查询,所有数据都被返回,只是在返回时没有被填充。

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

【问题讨论】:

  • 您可能需要显示一些代码来提供帮助。您使用的 C# LINQ 查询是什么? Glimpse 中生成的查询的 SQL 是什么?您的替代解决方案中的点是什么?
  • 如果我没记错的话(因为我不使用这样的存储过程),这是基于我读过的其他一些线程的已知问题。

标签: c# asp.net-mvc entity-framework linq


【解决方案1】:

试试这个:

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

当然,发布 SQL 有助于确定是否还有更好的方法来检索您的数据。

【讨论】:

  • 感谢您的回答,不幸的是,我只需要获取具有特定发件人的 cmets 和具有特定所有者的附件,因此我无法使用它。这是我另一个问题的基础,
  • 比上面的还快吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
  • 2021-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多