2010-08-09 14 views
11

In asp.net (usando MVC, ma questo avviene regolarmente troppo)È possibile accedere a un profilo senza aggiornare LastActivityDate?

Profile.GetProfile(username); 

aggiornerà la LastActivityDate per quell'utente. Questo non è inteso quando qualcun altro sta visualizzando il profilo di quell'utente.

Nella classe di appartenenza è possibile specificare se aggiornare questa data con un secondo param, in questo modo:

Membership.GetUser(username, false); // doesn't update LastActivityDate 
Membership.GetUser(username, true); // updates LastActivityDate 

Esiste un modo per fare qualcosa di simile nel provider di profilo senza scrivere il mio fornitore?

risposta

9

È possibile utilizzare una brutta soluzione alternativa che include la modifica della procedura memorizzata aspnet_Profile_GetProperties. Questo è responsabile per ottenere le proprietà durante l'accesso al profilo utente.

Apri questo procedimento e troverete seguente codice in basso:

IF (@@ROWCOUNT > 0) 
BEGIN 
    UPDATE dbo.aspnet_Users 
    SET [email protected] 
    WHERE UserId = @UserId 
END 

elimina al fine di fermare l'aggiornamento del LastActivityDate. Ti verrà comunque aggiornato LastActivityDate quando chiami Membership.GetUser(username, true);.

+3

Sì, modificare lo sproc è quello che ho finito per fare. A un certo punto probabilmente scriverò di nuovo la parte del profilo del mio sito su qualcosa di personalizzato o utilizzerò una terza parte, ma avevo bisogno di una soluzione rapida. – WildJoe

1

Si potrebbe guardare utilizzando un provider che qualcun altro ha scritto, piuttosto che scrivere il proprio.

Questo il blog di Scott Guthrie include stored procedure che potrebbero essere chiamate direttamente dal proprio codice per ottenere le informazioni:

http://weblogs.asp.net/scottgu/archive/2006/01/10/435038.aspx

Questa pagina ha una scarica msi che installa un'applicazione di esempio per lavorare con dati profilo personalizzati. Il profilo basato su tabelle si comporta molto meglio di quello predefinito attivo, in cui tutti i dati del profilo sono contenuti in un singolo campo di database. Anche la tabella basata è molto più facile da interrogare direttamente, il che ti aiuterà con la tua domanda. La stored procedure dal schema di esempio si chiama getCustomProfileData

Altrimenti, basta query al database direttamente.

+1

Mi sconsiglio vivamente di interrogare direttamente il database. Altrimenti, ottimo post. – bzlm

+0

@bzlm Rispetto le tue visualizzazioni di stringa e non posso essere in disaccordo se non mi dai una ragione. :) Ho interrogato i database per più anni di quanto mi piaccia ricordare e ho avuto troppe difficoltà. –

Problemi correlati