2010-06-15 62 views
1

我已經建立了一個存儲庫獲取用戶的詳細信息ASP.NET - 如何緩存訪問期間的用戶詳細信息?

Public Function GetUserByOpenID(ByVal openid As String) As User Implements IUserRepository.GetUserByOpenID 
    Dim user = (From u In dc.Users 
       Where u.OpenID = openid 
       Select u).FirstOrDefault 
    Return user 
End Function 

而且我希望能拉這些細節上下IF用戶在登錄,如果緩存的數據爲空。

創建一個包含所有用戶詳細信息的用戶對象的最佳方式是什麼,並在整個網站訪問期間堅持它?

我想在我的Global.asax中這樣做,但我並不是很高興使用會話變量。我寧願擁有一個包含所有細節的對象。

Private Sub BaseGlobal_AcquireRequestState(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.AcquireRequestState 
    If Session("UserName") Is Nothing AndAlso User.Identity.IsAuthenticated Then 
     Dim repo As UrbanNow.Core.IUserRepository = New UrbanNow.Core.UserRepository 
     Dim _user As New UrbanNow.Core.User 
     _user = repo.GetUserByOpenID(User.Identity.Name) 

     Session("UserName") = _user.UserName() 
     Session("UserID") = _user.ID 
    End If 
End Sub 

回答

2

將完整的用戶對象存儲在會話變量中,而不僅僅是成員。

//store 
Session("UserInfo") = _user 

//read 
Dim user = DirectCast(Session("UserInfo"), UrbanNow.Core.User) 

(Code以在線轉換器轉換爲vb.net,我不知道任何vb.net任何語法錯誤很抱歉)

+0

感謝。我猜會話變量仍然是要走的路。 – 2010-06-15 05:58:04