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 に答える