include方法是否在LINQ中命中数据库?

本文关键字:数据库 LINQ 方法 是否 include | 更新日期: 2023-09-27 18:03:19

我正在测试下面的Linq查询。我正在检查日志,看看是否有数据库命中:

var productEntities = _context.Set<Product>()
                .Include(p => p.OrderItems)
                .Include(p => p.OrderItems.Select(oi => oi.Order))
                .Include(p => p.OrderItems.Select(oi => oi.Order.Client));
            Console.WriteLine(productEntities.Count());

无论是否注释掉对Count()的调用,日志都会显示相同的输出:

Opened connection at 8/20/2016 3:32:53 PM -04:00

SELECT Count(*) FROM INFORMATION_SCHEMA。表在哪里?. table_schema + '。+ t.TABLE_NAME IN(' dbo.AccountRecords ',‘dbo.Products’,‘dbo.Douli’,‘dbo.OrderItems’,‘dbo.Orders’,‘dbo.Clients’,‘dbo.ShippingInformations’,‘dbo.OrderSpecialClients’,‘dbo.OrderSpecialProducts’,‘dbo.Taxes’,‘dbo.FixedOrders’,‘dbo.FixedOrderItems’,‘dbo.OrderSubstitutions’,‘dbo.OrderPerformanceLog’)OR t.TABLE_NAME = 'EdmMetadata'—执行时间:2016年8月20日下午3:32:53 -04:00—2毫秒内完成,结果:14

关闭连接在8/20/2016 3:32:53 PM -04:00打开连接在2016年8月20日下午3:32:53 -04:00选择[GroupBy1]。[a1] as [c1]From (select)将(1)算作[a1]从[dbo]。[__MigrationHistory] AS [Extent1]在[Extent1]。[ContextKey] = @p__linq__0) AS [GroupBy1]——p__linq__0: 'Arhoma.Core.Data. 'ArhomaContext' (Type = String, Size = 4000)—执行时间:2016年8月20日下午3:32:53 -04:00——在51毫秒内失败,错误:无效的对象名称'dbo.__MigrationHistory'.

关闭连接在8/20/2016 3:32:53 PM -04:00打开连接在2016年8月20日下午3:32:53 -04:00选择[GroupBy1]。[a1] as [c1]From (select)将(1)算作[a1]从[dbo]。[__MigrationHistory] AS [Extent1]) AS [GroupBy1]—执行时间:2016年8月20日下午3:32:53 -04:00——在36毫秒内失败,错误:无效的对象名称'dbo.__MigrationHistory'.

关闭连接在8/20/2016 3:32:53 PM -04:00打开连接在2016年8月20日下午3:32:53 -04:00选择[GroupBy1]。[a1] as [c1]From (select)将(1)算作[a1]从[dbo]。[产品]AS [Extent1]) AS [GroupBy1]—执行时间:2016年8月20日下午3:32:53 -04:00—0毫秒内完成,结果:SqlDataReader

关闭连接于2016年8月20日3:32:53 PM -04:00 299

我的问题是:为什么它会击中数据库?我认为当我添加。tolist()或其他东西或当它调用。count()时,会产生命中?但是,即使我删除了对Count()的调用,它仍然会访问数据库。所以现在我在想,是。include迫使数据库命中吗?

include方法是否在LINQ中命中数据库?

所有这些与MigrationHistory相关的查询只运行一次,即代码第一次连接到数据库。EF只是尝试验证数据库是否需要升级到更新的版本。

要确认这一点,请在之前尝试任何有意义的查询,以便具有Include s的查询是第二个查询。您将看到所有这些版本噪声,然后是您的第一个查询,然后什么也没有,因为Include本身没有检索任何东西。