Haben Sie den Grund, einen Datenbankaufruf zu speichern, wenn Sie die UserId benötigen? Wenn dies der Fall ist, verwende ich normalerweise den ASP.NET-Mitgliedschaftsanbieter entweder einen benutzerdefinierten Anbieter, der es mir ermöglicht, diesen Aufruf zwischenzuspeichern, oder eine Hilfsmethode, die ich zwischenspeichern kann.
Wenn Sie daran denken, es in das Profil zu setzen, sehe ich nicht viel Grund dafür, zumal es auch noch einen Datenbankanruf erfordert und es sei denn, Sie verwenden einen benutzerdefinierten Profilanbieter dort die zusätzliche Verarbeitung zum Aussortieren der UserId.
Wenn Sie sich fragen, warum sie eine GetUserId-Methode nicht implementiert haben, liegt es einfach daran, dass Sie nicht immer garantieren können, dass diese Benutzer-ID eine GUID wie im mitgelieferten Provider sein wird.
EDIT:
See ScottGu's article on providers, die eine link to downloading the actual source code for i.e. SqlMembershipProvider bietet.
Aber die einfachste Sache zu tun ist eine GetUserId() - Methode in Ihrem Benutzerobjekt oder Dienstprogramm-Klasse, wo Sie die UserId aus dem Cache/Sitzung, wenn dort, die Datenbank schlagen, Cache nach Benutzername (oder speichern in Sitzung), und geben Sie es zurück.
Für etwas mehr zu betrachten (aber sehr vorsichtig sein, da der Cookie-Größenbeschränkungen): Forms Auth: Membership, Roles and Profile with no Providers and no Session
Können Sie den Grund warum erweitern? – Kev
Wenn ich Membership.GetUser() anrufe.ProviderUserKey wird immer aufgerufen Aufruf an die DB, um diese UserId abzurufen – GrZeCh