2010-08-09 31 views
11

En asp.net (usando MVC, pero esto sucede en regulares demasiado)¿Es posible acceder a un perfil sin actualizar LastActivityDate?

Profile.GetProfile(username); 

se actualizará el LastActivityDate para ese usuario. Esto no está destinado cuando alguien más está viendo el perfil de ese usuario.

En la clase de miembros puede especificar si desea actualizar esta fecha con un segundo parámetro, así:

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

¿Hay alguna forma de hacer algo similar en el proveedor de perfil sin necesidad de escribir mi propio proveedor?

Respuesta

9

Puede usar una solución fea que incluye cambiar el procedimiento almacenado aspnet_Profile_GetProperties. Éste es responsable de obtener las propiedades al acceder al perfil del usuario.

abierto este procedimiento y se encuentra siguiente código en la parte inferior:

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

quitarlo con el fin de detener la actualización del LastActivityDate. Seguirá recibiendo LastActivityDate actualizado al llamar al Membership.GetUser(username, true);.

+3

Sí, editando el sproc es lo que terminé haciendo. En algún momento, probablemente vuelva a escribir la parte del perfil de mi sitio en algo personalizado o use un tercero, pero necesitaba una solución rápida. – WildJoe

1

Puede utilizar un proveedor que alguien más haya escrito, en lugar de escribir el suyo.

Ésta en el blog de Scott Guthrie incluye procedimientos almacenados que podrían ser llamados directamente por su propio código para obtener la información:

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

Esta página tiene una descarga de MSI que instala una aplicación de ejemplo para trabajar con Datos de perfil personalizados. El perfil basado en tabla funciona mucho mejor que el predeterminado, donde todos los datos de perfil están contenidos en un solo campo de base de datos. La tabla basada en uno también es mucho más fácil de consultar directamente, lo que le ayudará con su pregunta. El procedimiento almacenado desde el esquema de ejemplo se llama getCustomProfileData

De lo contrario, simplemente consulta la base de datos directamente.

+1

No recomiendo consultar la base de datos directamente. De lo contrario, gran publicación. – bzlm

+0

@bzlm Respeto sus vistas de cadena y no puedo estar en desacuerdo si no me da una razón. :) He estado consultando bases de datos por más años de lo que me gusta recordar y no he tenido demasiadas dificultades. –

Cuestiones relacionadas