在EF6中无法在VB中关闭延迟加载

时间:2015-01-08 01:29:57

标签: vb.net entity-framework ef-code-first

VS2013,代码首先是EF6,VB

在其他地方我发现了一篇帖子,让我把它添加到我的Context类中:

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可以找到PossibleAnswers数据。

我检查了

的值
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

有人可以建议我对此不了解吗?

感谢。

最诚挚的问候, 艾伦

1 个答案:

答案 0 :(得分:0)

如果您希望上下文中的所有结果自动加载导航属性,则应从上下文类中删除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

将Lazy Loading设置为false,您必须明确告诉EF包含导航属性以及结果集。你可以使用.Include函数(就像你做的那样)。调用.Include函数称为Eager Loading。

如果将延迟加载属性设置为true,则会自动从数据库中撤回导航属性。这是从MSDN快速运行的Lazy Loading:
http://msdn.microsoft.com/en-us/library/vstudio/dd456846(v=vs.100).aspx