问题 是否可以在不更新LastActivityDate的情况下访问配置文件?


在asp.net中(使用MVC,但这也经常发生)

Profile.GetProfile(username);

将更新该用户的LastActivityDate。当其他人正在查看该用户的个人资料时,无意这样做。

在成员资格类中,您可以指定是否使用第二个参数更新此日期,如下所示:

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

无论如何在没有编写我自己的提供者的情况下在Profile提供者中做类似的事情?


3016
2017-08-09 07:48


起源



答案:


您可能会使用一个丑陋的解决方法,其中包括更改 aspnet_Profile_GetProperties 存储过程。这个负责在访问用户配置文件时获取属性。

打开此过程,您将在底部找到以下代码:

IF (@@ROWCOUNT > 0)
BEGIN
    UPDATE dbo.aspnet_Users
    SET    LastActivityDate=@CurrentTimeUtc
    WHERE  UserId = @UserId
END

删除它以停止更新 LastActivityDate。你仍然会得到 LastActivityDate 通话时更新 Membership.GetUser(username, true);


9
2017-08-08 13:24



是的,编辑sproc是我最终做的。在某些时候,我可能会将我网站的个人资料部分重新编写为自定义或使用第三方,但我需要快速修复。 - WildJoe


答案:


您可能会使用一个丑陋的解决方法,其中包括更改 aspnet_Profile_GetProperties 存储过程。这个负责在访问用户配置文件时获取属性。

打开此过程,您将在底部找到以下代码:

IF (@@ROWCOUNT > 0)
BEGIN
    UPDATE dbo.aspnet_Users
    SET    LastActivityDate=@CurrentTimeUtc
    WHERE  UserId = @UserId
END

删除它以停止更新 LastActivityDate。你仍然会得到 LastActivityDate 通话时更新 Membership.GetUser(username, true);


9
2017-08-08 13:24



是的,编辑sproc是我最终做的。在某些时候,我可能会将我网站的个人资料部分重新编写为自定义或使用第三方,但我需要快速修复。 - WildJoe


您可能会考虑使用其他人编写的提供程序,而不是编写自己的提供程序。

Scott Guthrie博客上的这个包含存储过程,可以通过您自己的代码直接调用以获取信息:

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

此页面有一个msi下载,它安装了一个示例应用程序,用于处理自定义配置文件数据。基于表的配置文件比默认配置文件执行得更好,其中所有配置文件数据都包含在单个数据库字段中。基于表格的表格也更容易直接查询,这将帮助您解决问题。调用示例模式中的存储过程 getCustomProfileData

否则,只是 直接查询数据库


1
2017-08-09 07:57



我强烈建议不要直接查询数据库。否则,很棒的帖子。 - bzlm
@bzlm我尊重你的字符串观点,如果你不给我一个理由,我不能不同意。 :)我一直在查询数据库多年,而不是我想记住并且没有太多困难。 - Daniel Dyson