我在N层应用程序中遇到了Context生存期问题。
我正在使用的包装器示例:
Public Class User
Private _user As DB.User
Private context As New DB.MyContainer
Public Sub New(ByVal UserID As Integer)
_user = context.Users.FirstOrDefault(Function(x) x.Id = UserID)
End Sub
Public Sub Save()
context.SaveChanges()
End Function
此方法导致我的UI图层出现问题。数据可以由UI层更新,这仍将返回“陈旧”数据,因为尚未处理上下文。如果在Finalize()中我设置了context.Dispose(),那么我无法访问该类的任何属性。
我每次都应该调用.reload(),还是应该缩短上下文?为了缩短它,我不必分离实体,然后在调用Save()时将其重新连接到新的上下文?
答案 0 :(得分:1)
请看这篇文章: http://msdn.microsoft.com/en-us/magazine/ee335715.aspx
在每个的Using语句中创建一个新的ObjectContext实例 service方法,以便在方法返回之前将其处理掉。 此步骤对于服务的可伸缩性至关重要。它确保 数据库连接不会在服务调用之间保持打开状态 特定操作使用的临时状态是垃圾 在该操作结束时收集。实体框架 自动缓存所需的元数据和其他信息 app域,和ADO.NET池数据库连接,所以重新创建 上下文每次都是快速操作。