2014-02-11 66 views
0

我在N層應用程序中遇到了與我的上下文生命週期有關的問題。在實體框架中管理上下文生命週期

我使用的是包裝的一個例子:

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

它是Windows窗體還是ASP.Net? – Win

+0

Asp.net vb ..... –

回答

1

請參閱這篇文章: http://msdn.microsoft.com/en-us/magazine/ee335715.aspx

爲使其方法返回之前設置的每個 服務方法的使用語句來創建一個新的ObjectContext的實例。 這一步對於您的服務的可伸縮性至關重要。它確保 數據庫連接不會在服務調用中保持打開,並且 特定操作使用的臨時狀態是該操作結束時收集的垃圾 。實體框架 在應用程序域中自動緩存所需的元數據和其他信息,並且ADO.NET池數據庫連接,因此每次重新創建 上下文都是快速操作。

+0

我使用這種方法的問題是,當我調用new(),然後嘗試訪問該類的公共屬性時,實體對象爲null –

相關問題