2010-08-09 17 views
11

En asp.net (en utilisant MVC, mais ce qui se passe dans trop régulière)Est-il possible d'accéder à un profil sans mettre à jour LastActivityDate?

Profile.GetProfile(username); 

mettra à jour le LastActivityDate pour cet utilisateur. Cela n'est pas prévu lorsque quelqu'un d'autre consulte le profil de cet utilisateur.

Dans la classe d'appartenance, vous pouvez indiquer si vous souhaitez mettre à jour cette date avec une deuxième param, comme ceci:

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

Y at-il de toute façon de faire quelque chose de similaire dans le fournisseur de profil sans écrire mon propre fournisseur?

Répondre

9

Vous pouvez utiliser une solution de contournement laide qui inclut la modification de la procédure stockée aspnet_Profile_GetProperties. Celui-ci est responsable de l'obtention des propriétés lors de l'accès au profil de l'utilisateur.

Ouvrir cette procédure et vous trouverez le code suivant au bas:

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

Retirez-le afin d'arrêter la mise à jour du LastActivityDate. Vous aurez toujours LastActivityDate mis à jour lors de l'appel Membership.GetUser(username, true);.

+3

Oui, l'édition du sproc est ce que j'ai fini par faire. À un moment donné, je vais probablement réécrire la partie du profil de mon site à quelque chose de personnalisé ou utiliser un tiers, mais j'avais besoin d'une solution rapide. – WildJoe

1

Vous pourriez envisager d'utiliser un fournisseur que quelqu'un d'autre a écrit, plutôt que d'écrire le vôtre.

Celui-ci sur le blog de Scott Guthrie inclut des procédures stockées qui pourraient être appelées directement par votre propre code pour obtenir l'information:

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

Cette page a un téléchargement msi qui installe un exemple d'application pour travailler avec données de profil personnalisées. Le profil basé sur la table fonctionne beaucoup mieux que la valeur par défaut, où toutes les données de profil sont contenues dans un seul champ de base de données. Le tableau basé sur un est aussi beaucoup plus facile à interroger directement, ce qui vous aidera avec votre question. La procédure stockée à partir du schéma de l'échantillon est appelé getCustomProfileData

Sinon, requête la base de données directement.

+1

Je déconseille vivement d'interroger directement la base de données. Sinon, super article. – bzlm

+0

@bzlm Je respecte vos vues de cordes et je ne peux pas être en désaccord si vous ne me donnez pas de raison. :) J'ai interrogé des bases de données depuis plus d'années que je ne me souviens et j'ai eu trop de difficultés. –