我有以下(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()
但它仍然没有工作。有任何想法吗?