次の (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()
それでもうまくいきませんでした。何か案は?