【问题标题】:Do sub-queries hit database multiple times if using Entity Framework如果使用实体框架,子查询是否多次命中数据库
【发布时间】:2019-07-31 07:17:48
【问题描述】:

可能看起来像一个愚蠢的问题,但请阅读它...我正在编写一些服务,并且出现了我必须使用实体框架的子查询的情况。现在我写了一个带有子查询的查询,但是我写它的方式让我想到我的查询是否两次访问数据库?

下面是实际查询的伪代码......

var data = databaseContext.FirstTable
                          .Where(x => x.Group_Id == (databaseContext.SecondTable
                                                                    .Where(y => y.DomainName == "gmail.com")
                                                                    .Select(x => x.Group_Id)
                                                                    .FirstAndDefault()))
                         .ToList();

这个查询给出了我的预期结果,但我认为它两次访问数据库。我说的对吗?

现在我不想要一个是否的答案,而是一个简短的描述,我可以把这个查询变成一个连接查询吗?以及一些用于检查 SQL Server 中的数据库命中的工具或技巧,例如跟踪器或其他东西。

【问题讨论】:

  • 在 ssms 中使用分析器

标签: entity-framework-6 asp.net-web-api2


【解决方案1】:

是的。当您第一次调用或默认调用时,Iqueryable 将被发送到数据库。您可以使用交易来欺骗它。此外,建议您在此处使用事务。另外,对于您要执行的操作,我建议使用 EF 的过渡属性。

var data = databaseContext.FirstTable
                          .Include(x=>x.SecondTable)
                          .Where(x => x.SecondTable.DomainName == "gmail.com")

SQL 服务器分析器将向您显示数据库上的所有查询。当然,不建议在本地主机以外的任何地方使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多