Можно ли получить доступ к профилю без обновления LastActivityDate?

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

Profile.GetProfile(username);

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

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

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

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

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

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