gpt4 book ai didi

c# - 为什么 Entity Framework 的 SQL 查询在探查器中不可见?

转载 作者:行者123 更新时间:2023-11-30 22:34:16 25 4
gpt4 key购买 nike

考虑这段代码:

var question = context.Questionnaires.FirstOrDefault(q => q.id == 169).Categories.ToList()[1].Questions.ToList()[0];

这只是我熟悉 EF 工作原理的一些练习代码。因此,出于这个原因,我创建了一些表格。引用类别的调查问卷,类别引用问题。

当我执行这段代码时,我在这里注意到,我在探查器中只看到调查问卷的选择语句。但我想知道,获取所有类别和问题的查询在哪里?我找不到这个查询?我想这在探查器中一定是可见的,对吧?

编辑:这是我可以从探查器中得到的:

SELECT TOP (1) 
[Extent1].[id] AS [id],
[Extent1].[actualFrom] AS [actualFrom],
[Extent1].[name] AS [name],
[Extent1].[version] AS [version],
[Extent1].[startDate] AS [startDate],
[Extent1].[endDate] AS [endDate],
[Extent1].[description] AS [description],
[Extent1].[createdOn] AS [createdOn],
[Extent1].[createdBy] AS [createdBy],
[Extent1].[showQuestionCode] AS [showQuestionCode],
[Extent1].[font] AS [font],
[Extent1].[removed] AS [removed],
[Extent1].[showAchievementsAppointmentTab] AS [showAchievementsAppointmentTab],
[Extent1].[showConceptTabs] AS [showConceptTabs],
[Extent1].[f_QuestionnaireBuilder_QuestionnaireType_Id] AS [f_QuestionnaireBuilder_QuestionnaireType_Id],
[Extent1].[f_QuestionnaireBuilder_Status_Id] AS [f_QuestionnaireBuilder_Status_Id],
[Extent1].[f_QuestionnaireBuilder_Questionnaire_ParentId] AS [f_QuestionnaireBuilder_Questionnaire_ParentId],
[Extent1].[f_QuestionnaireBuilder_QuestionnaireCategory_Id] AS [f_QuestionnaireBuilder_QuestionnaireCategory_Id],
[Extent1].[f_Careplan_VisionModel] AS [f_Careplan_VisionModel]
FROM [implementation].[QuestionnaireBuilder_Questionnaire] AS [Extent1]
WHERE 169 = [Extent1].[id]

最佳答案

您是否启用了延迟加载?

如果延迟加载启用,我认为您的 C# 行会抛出异常。唯一一次访问数据库是在调用 FirstOrDefault 时。返回的 Questionnaire 将包含一个空的 Categories 集合,因为您没有将它们包含在原始查询中。因此,请求 1 的索引应该抛出异常。

如果启用延迟加载,那么该行应该可以工作,但会导致多个查询访问数据库。第一个是调用 FirstOrDefault,第二个是将 Categories 转换为列表,第三个是 Questions 的转换 到一个列表。

因此,如果您启用了延迟加载,请在您发布的查询之后检查探查器是否有其他查询。

如果延迟加载被禁用,你可以试试这个:

var question = context.Questionnaires.
Include("Categories.Questions").
FirstOrDefault(q => q.id == 169).
Categories.ToList()[1].
Questions.ToList()[0];

这是一篇包含更多信息的简短博文。 Getting Started with Entity Framework 4 – Lazy Loading

关于c# - 为什么 Entity Framework 的 SQL 查询在探查器中不可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7904063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com