Можно ли получить доступ к профилю без обновления LastActivityDate? - PullRequest
11 голосов
/ 09 августа 2010

В asp.net (с использованием MVC, но это также происходит в обычном режиме)

Profile.GetProfile(username);

обновит LastActivityDate для этого пользователя.Это не предназначено, когда кто-то другой просматривает профиль этого пользователя.

В классе членства вы можете указать, обновлять ли эту дату вторым параметром, например так:

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

Есть лив любом случае сделать что-то подобное в провайдере профиля без написания собственного провайдера?

Ответы [ 2 ]

9 голосов
/ 08 августа 2011

Вы можете использовать один уродливый обходной путь, который включает изменение хранимой процедуры aspnet_Profile_GetProperties. Этот отвечает за получение свойств при доступе к профилю пользователя.

Откройте эту процедуру, и вы найдете следующий код внизу:

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

Удалите его, чтобы прекратить обновление LastActivityDate. Вы все равно получите LastActivityDate обновленный при звонке Membership.GetUser(username, true);.

1 голос
/ 09 августа 2010

Вы можете обратиться к провайдеру, которого кто-то другой написал, а не к своему собственному.

В этом блоге Скотта Гатри содержатся хранимые процедуры, которые могут вызываться непосредственно вашим собственным кодом для получения информации.:

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

На этой странице есть загрузка в формате msi, которая устанавливает образец приложения для работы с данными пользовательского профиля.Профиль на основе таблиц работает намного лучше, чем по умолчанию, когда все данные профиля содержатся в одном поле базы данных.На основе таблицы также гораздо проще делать запросы напрямую, что поможет вам в вашем вопросе.Хранимая процедура из примера схемы называется getCustomProfileData

В противном случае просто запрашивает базу данных напрямую .

...