Ist Ihr Grund dafür, bei jedem Abruf der UserId einen Datenbankaufruf zu sparen? Wenn ja, verwende ich beim Verwenden des ASP.NET MembershipProviders normalerweise entweder einen benutzerdefinierten Provider, der es mir ermöglicht, diesen Aufruf zu zwischenspeichern, oder eine Hilfsmethode, die ich zwischenspeichern kann.
Wenn Sie darüber nachdenken, es im Profil zu speichern, sehe ich nicht viel Grund dafür, insbesondere da es immer noch einen Datenbankaufruf erfordert und es, es sei denn, Sie verwenden dort einen benutzerdefinierten Profilanbieter, die zusätzliche Verarbeitung des Herausparsens der Benutzer-ID hat.
Wenn Sie sich fragen, warum sie keine GetUserId-Methode implementiert haben, liegt das einfach daran, dass Sie nicht immer garantieren können, dass diese Benutzer-ID ein GUID wie im mitgelieferten Anbieter ist.
BEARBEITEN:
Siehe ScottGu's Artikel über Anbieter, der einen Link zum Herunterladen des tatsächlichen Quellcodes für z.B. SqlMembershipProvider bereitstellt.
Aber das einfachste, was man wirklich tun kann, ist eine GetUserId()-Methode in Ihrem Benutzerobjekt oder Hilfsklasse, in der Sie die UserId aus dem Cache/der Session abrufen, andernfalls die Datenbank abfragen, sie nach Benutzername zwischenspeichern (oder in der Sitzung speichern) und zurückgeben.
Für etwas, über das Sie nachdenken sollten (aber sehr vorsichtig sein sollten wegen der Cookie-Größenbeschränkungen): Forms Auth: Membership, Roles und Profile ohne Anbieter und ohne Sitzung