CodeGo.net> .include方法是否在LINQ中命中数据库?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了CodeGo.net> .include方法是否在LINQ中命中数据库?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2506字,纯文字阅读大概需要4分钟。
内容图文
![CodeGo.net> .include方法是否在LINQ中命中数据库?](/upload/InfoBanner/zyjiaocheng/883/d247ec5dd48646b49cb6c43460ace9ce.jpg)
我正在测试下面的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()的调用,日志都会显示以下相同输出:
06001
SELECT Count(*) FROM INFORMATION_SCHEMA.TABLES AS t WHERE
t.TABLE_SCHEMA + ‘.’ + t.TABLE_NAME IN
(‘dbo.AccountRecords’,’dbo.Products’,’dbo.Doughs’,’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’
— Executing at 8/20/2016 3:32:53 PM -04:00
— Completed in 2 ms with result: 14Closed connection at 8/20/2016 3:32:53 PM -04:00 Opened connection at
8/20/2016 3:32:53 PM -04:00 SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[__MigrationHistory] AS [Extent1]
WHERE [Extent1].[ContextKey] = @p__linq__0
) AS [GroupBy1]
— p__linq__0: ‘Arhoma.Core.Data.ArhomaContext’ (Type = String, Size = 4000)
— Executing at 8/20/2016 3:32:53 PM -04:00
— Failed in 51 ms with error: Invalid object name ‘dbo.__MigrationHistory’.Closed connection at 8/20/2016 3:32:53 PM -04:00 Opened connection at
8/20/2016 3:32:53 PM -04:00 SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[__MigrationHistory] AS [Extent1]
) AS [GroupBy1]
— Executing at 8/20/2016 3:32:53 PM -04:00
— Failed in 36 ms with error: Invalid object name ‘dbo.__MigrationHistory’.Closed connection at 8/20/2016 3:32:53 PM -04:00 Opened connection at
8/20/2016 3:32:53 PM -04:00 SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[Products] AS [Extent1]
) AS [GroupBy1]
— Executing at 8/20/2016 3:32:53 PM -04:00
— Completed in 0 ms with result: SqlDataReaderClosed connection at 8/20/2016 3:32:53 PM -04:00 299
我的问题:为什么它会打入数据库?我以为是在添加.ToList()之类的东西或调用.Count()时做出的?但是,即使我删除了对Count()的调用,它仍然会命中数据库.所以现在我在想,是否是.include迫使数据库命中?
解决方法:
所有这些与MigrationHistory相关的查询仅在代码首次连接到数据库时运行一次. EF仅尝试验证是否需要将数据库升级到较新版本.
要确认这一点,请在您提出的查询之前尝试任何有意义的查询,以使带有Includes的查询成为第二个查询.您将看到所有这些版本控制噪音,然后是您的第一个查询,然后没有任何内容,因为Include本身未检索任何内容.
内容总结
以上是互联网集市为您收集整理的CodeGo.net> .include方法是否在LINQ中命中数据库?全部内容,希望文章能够帮你解决CodeGo.net> .include方法是否在LINQ中命中数据库?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。