Можно ли получить доступ к профилю без обновления 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, которая устанавливает пример приложения для работы с данными профиля. Профиль на основе таблицы работает намного лучше, чем значение по умолчанию, где все данные профиля содержатся в одном поле базы данных. На основе таблицы также намного проще запросить напрямую, что поможет вам с вашим вопросом. Хранимая процедура из схемы образца называется getCustomProfileDatastrong >
В противном случае просто запросить базу данных напрямую.