2016-01-27 44 views
0

我似乎無法在任何地方找到答案。我正在使用自定義成員資格提供程序和成員資格用戶以及我自己的表格,這看起來顯得太過於麻煩了。當更新用戶記錄時,看起來我需要更新其成員資格用戶實例,否則在依賴來自成員資格用戶的數據時,它不對應於更新的數據庫。更新自定義會員用戶

我已經建立了我自己的更新成員資格用戶的方法,因爲現有的一個只有接受它自己的MembershipUser類:

public static void UpdateAccountUser(AccountUser accountUser) 
    { 
     // Custom MembershipUser 
     ToMembershipUser user = new ToMembershipUser(
        "AccountUserMembershipProvider", 
        accountUser.FirstName + " " + accountUser.LastName, 
        accountUser.ID, 
        accountUser.Email, 
        "", 
        "", 
        true, 
        false, 
        DateTime.Now, 
        DateTime.MinValue, 
        DateTime.MinValue, 
        DateTime.MinValue, 
        DateTime.MinValue); 

     // Fill additional properties 
     user.ID = accountUser.ID; 
     user.Email = accountUser.Email; 
     user.FirstName = accountUser.FirstName; 
     user.LastName = accountUser.LastName; 
     user.Password = accountUser.Password; 
     user.MediaID = accountUser.MediaID; 
     user.Media = accountUser.Media; 
     user.Identity = accountUser.Identity; 
     user.CreatedAt = accountUser.CreatedAt; 
     user.UpdatedAt = accountUser.UpdatedAt; 

     UpdateCookie(user.Email); 
    } 
    private static void UpdateCookie(string email) 
    { 
     HttpCookie cookie = FormsAuthentication.GetAuthCookie(email, true); 
     var ticket = FormsAuthentication.Decrypt(cookie.Value); 

     // Store UserData inside the Forms Ticket with all the attributes 
     // in sync with the web.config 
     var newticket = new FormsAuthenticationTicket(ticket.Version, 
                 ticket.Name, 
                 ticket.IssueDate, 
                 ticket.Expiration, 
                 true, // always persistent 
                 email, 
                 ticket.CookiePath); 

     // Encrypt the ticket and store it in the cookie 
     cookie.Value = FormsAuthentication.Encrypt(newticket); 
     cookie.Expires = newticket.Expiration.AddHours(24); 
     HttpContext.Current.Response.Cookies.Set(cookie); 
    } 

現在很明顯,這只是創建一個新的實例,而不是更新現有的一個,這不允許我在沒有註銷並重新登錄的情況下查看更新的細節。任何想法?

編輯 因此,我設法找到了別人使用自己的自定義更新方法的例子,但他們似乎在做的是更新數據庫而不是MembershipUser本身。我已經在做這個了?

我試圖改爲更新FormsAuthenticationCookie,然後調用Membership.GetUser()時,我至少傳遞一個更新的User.Identity.Name,但無效,即使數據庫更新仍然是舊數據。我已經跑出去的想法......

這可能可能是昨天的問題MembershipUser not getting updated result from database

回答

0

我終於找到了被的MembershipUser不更新重演由於每次我打電話的getUser()所涉及的查詢時間正在使用FirstOrDefault()。原來這緩存了結果而不是檢索新的結果。通過將AsNoTracking()添加到查詢本身,我現在可以獲得更新的結果,而不必調用UpdateUser()。