0

我有以下(vb.net)模型类:

Public Class Contact
    Implements IModelEntity

    Public Property ID() As Integer

    Public Property Name() As String
    Public Overridable Property ContactDetails() As ContactDetails

    Public Sub New()
        ID = 0
        Name = ""
        ContactDetails = New ContactDetails
    End Sub
End Class

Public Class Person
    Inherits Contact
    Implements IModelEntity

    Public Property Surname() As String
    Public Property DOB() As DateTime

    Public Sub New()
        Surname = ""
        DOB = DateTime.Today
    End Sub
End Class

Public Class ContactDetails
    Implements IModelEntity

    Public Property ID() As Integer

    Public Property WebAddresses() As List(Of WebAddress)
    Public Property PhoneNumbers() As List(Of PhoneNumber)
    Public Property EmailAddresses() As List(Of String)
    Public Property SocialMediaAliases() As List(Of SocialMediaAlias)
    Public Property PostalAddresses() As List(Of PostalAddress)

    Public Sub New()
        ID = 0
        WebAddresses = New List(Of WebAddress)
        PhoneNumbers = New List(Of PhoneNumber)
        EmailAddresses = New List(Of String)
        SocialMediaAliases = New List(Of SocialMediaAlias)
        PostalAddresses = New List(Of PostalAddress)
    End Sub
End Class

Public Class eCRMContext
    Inherits DbContext

    Public Sub New()
        Me.Configuration.LazyLoadingEnabled = False
    End Sub

    Protected Overrides Sub OnModelCreating(modelBuilder As System.Data.Entity.DbModelBuilder)
        MyBase.OnModelCreating(modelBuilder)

        modelBuilder.Entity(Of Contact).HasRequired(Function(x) x.ContactDetails).WithOptional().WillCascadeOnDelete()
    End Sub

    Public Property ContactDetailsSet As DbSet(Of ContactDetails)
    Public Property Persons As DbSet(Of Person)
End Class

在人员控制器中,我有以下内容:

    ' GET: /Person/Edit/5

    Function Edit(id As Integer) As ViewResult
        Dim person As Person = db.Persons.Find(id)

        Return View(person)
    End Function

但是,即使将 LazyLoading 设置为 False,person.ContactDetails 也不会加载!我已经检查了数据库,并且已经正确生成了关系,并且代码首先生成的键具有正确的值。这是怎么回事?

更新

我也尝试过明确地做:

db.Persons.Where(Function(x) x.ID=id).Include("ContactDetails").SingleOrDefault()

并且

db.Persons.Where(Function(x) x.ID=id).Include(Function(y) y.ContactDetails).SingleOrDefault()

但它仍然没有工作。有任何想法吗?

4

1 回答 1

1

将延迟加载设置为 false 不会打开自动预加载 - 它只是关闭延迟加载。如果要加载关系,则必须Include在查询中使用方法(并且必须使用SingleOrDefault代替Find)。

于 2012-08-21T10:47:05.237 回答