Vb.net 无法在EF6的VB中关闭延迟加载

Vb.net 无法在EF6的VB中关闭延迟加载,vb.net,entity-framework,ef-code-first,Vb.net,Entity Framework,Ef Code First,VS2013,代码优先EF6,VB 在其他地方,我发现了一篇帖子,引导我将其添加到我的上下文类中: Public Sub New() Me.Configuration.LazyLoadingEnabled = False End Sub 但是,为了将一个辅助表加载到我的上下文中,以便视图在for Each循环中查找要列出的数据,我必须添加: Dim myQuery = db.Questions.Include("PossibleAnswers").Where(Function(x) x.Q

VS2013,代码优先EF6,VB

在其他地方,我发现了一篇帖子,引导我将其添加到我的上下文类中:

Public Sub New()
  Me.Configuration.LazyLoadingEnabled = False
End Sub
但是,为了将一个辅助表加载到我的上下文中,以便视图在for Each循环中查找要列出的数据,我必须添加:

Dim myQuery = db.Questions.Include("PossibleAnswers").Where(Function(x) x.QuestionID = 6).Single()
如果没有这种或那种形式的查询,“我的视图”在属性“PossibleAnswers”中找不到任何数据,并且在For Each循环期间不会显示任何内容。但是通过上面的查询,For Each会找到可能的答案数据

我检查了

db.Configuration.LazyLoadingEnabled
就在我的观点被认为是错误的之前。但我仍然必须使用Include()方法进行查询,以强制将数据引入上下文

这是有关表格的完整定义:

Public Class Question
  Public Enum qType
    TrueFalse
    MultipleChoice
    ShortAnswer
  End Enum
  Public Property QuestionID As Integer
  Public Property Text As String
  Public Property Type As qType
  Public Property PossibleAnswers As New List(Of qAnswer)
  Public Property UsedBySurveys As New List(Of qSurvey)
End Class
有人能告诉我我对这件事可能不了解的地方吗

谢谢

致以最良好的祝愿,
Alan

如果希望上下文中的所有结果自动加载导航属性,应从上下文类中删除Me.Configuration.LazyLoadingEnabled=False行

您还可以显式地将上下文实例的延迟加载设置为false:ie

Using db As New MyContext
    db.Configuration.LazyLoadingEnabled = True
    Dim myQuery = db.Questions.Where(Function(x) x.QuestionID = 6).Single()
End Using
将延迟加载设置为false时,您必须显式地告诉EF在结果集中包含导航属性。您可以通过使用.Include函数来实现这一点(就像您所做的那样)。调用.Include函数称为即时加载

如果将lazy loading属性设置为true,则导航属性将自动从数据库中回调。下面是MSDN中延迟加载的简要说明:

我研究了您提供的链接。因此,在我上面的第一篇文章中,我似乎指出了与我想要的完全相反的东西,是吗?为了让所有数据自动加载,您(以及上面的链接)告诉我将LazyLoadingEnabled设置为True。那么,它之所以被称为Lazy,是因为“我在指定方面很懒”,所以它会加载所有内容以确保安全吗?现在,在您的示例中,您有一个.Include,但是因为…Lazy=True;如果没有这一点,我不会得到可能的答案。包括在你的例子中吗?还是我还遗漏了什么?没错,你最初的帖子与你想要的恰恰相反。我喜欢“我懒于指定”这句话,它就是这么做的。它将加载所有内容。不需要上面示例中的.Include。我复制了您的代码以便在我的示例中使用,但忘了将其排除在外。我编辑了我的示例,将其删除。