我遇到了创建用于连接UI层和数据层的包装器的问题。在每个包装器对象中使用EF 5,我使用以下内容进行初始化:
Public Class Person
Dim db As New db.Contex
Dim _person As db.Person
Public Sub New(ByVal PID As Guid)
_person = (from p in db.people where p.ID = PID)
End Sub
Public Sub Save()
db.SaveChanges()
End Sub
以上代码导致缓存问题,因为数据存储区将使用正确的值进行更新,但在再次调用Person时,将返回旧数据。我习惯这个问题的解决方案是:
Public Sub New(ByVal PID As Guid)
db.Entry(db.Leads.Find(PID)).Reload()
_person = db.People.Find(PID)
End If
End Sub
虽然这确实通过强制重新加载对象来解决问题,但似乎这是一种解决方法而不是真正的修复。有人可以指出我做错了导致EF返回错误数据吗?
示例问题如下:
Dim tmpPerson as New Person(SomeValue)
tmpPerson.SomeParam = NewValue
tmpPerson.Save()
Dim tmpPerson_1 as New Person(SomeValue)
tmpPerson.SomeParam -> will display old value, not new value