1

我在ASP.NET MVC 3 Web應用程序項目中使用ASP.NET成員資格。避免使用ASP.NET成員資格時多次調用GetUser

我已經使用Aspnet_regsql.exe安裝了ASP.NET成員表,現在我的主要userTable有一個名爲「userID」的foriegn鍵,它指向了aspnet_Users的「UserId」。

此「userTable」連接到許多表。所以

對於這個現在每個操作我需要從aspnet_User的「用戶ID」表示使用該用戶已經登錄的用戶名。我用

MembershipUser user = Membership.Provider.GetUser(username, true); 

現在每個操作我不得不做出這個致電user.ProviderUserKey繼續我的其他業務。

我在想,必須有更好的方法來做到這一點。是否有任何內置的方式來做到這一點?

回答

1

ASP.NET成員資格提供程序不是爲了提供ProviderUserKey ...也許你可以使用用戶名呢?您始終可以通過Context.User.Identity.Name輕鬆訪問它。

0

我總是用:

Guid userId = (Guid)Membership.GetUser().ProviderUserKey; 
+0

多次調用數據庫的權利?這正是我想要避免的。 – Yasser

+0

你可以保存cookie中的provideruserkey。 – 1110

0

你曾經獲得用戶信息,並把它放在窗體身份驗證cookie與加密的用戶數據。

對於您使用Context.Identity用戶信息

0

您可以在緩存中保持周圍的相關信息,例如在Dictionary<string, Guid>其中的關鍵是用戶名(你可以查找後續調用使用HttpContext.Current.User.Identity.Name或Thread.CurrentPrincipal.Identity.Name),並且ProviderUserKey是值。

根據需要構建此字典或初始化一次,並將其放入ASP.NET緩存,會話或應用程序(當然,請注意我們的序列化和併發問題)。