У меня есть приложение ASP.NET. Я использую аутентификацию с профилями пользователей. Я использую SQL Server в качестве поставщика данных. Я хочу заполнить элемент управления GridView всеми пользователями системы дополнительной информацией профиля.
Пока я делаю так:
UserAccounts.DataSource = Membership.GetAllUsers();
UserAccounts.DataBind();
С этим я могу составить список с полями: UserName и Email. Но теперь я хочу добавить поля First и LastName, которые я сохраняю как данные профиля.
Я нашел этот пост и попытался сделать так:
ProfileInfoCollection profiles = ProfileManager.GetAllProfiles(ProfileAuthenticationOption.All);
DateTime lastActivity = profiles["some_username"].Email;
но это дает мне только стандартные пользовательские поля, такие как Email, LastActivityDate и т. Д. Позже я попытался вызвать функцию для каждой строки в таблице GridView.
public string GetProfileValue(string name, string UserName)
{
ProfileBase pb = ProfileBase.Create(UserName, true);
return pb.GetPropertyValue(name).ToString();
}
Но я не думаю, что эффективно запрашивать базу данных для каждого поля с информацией профиля. Я думал о соединении таблиц aspnet_Users
и aspnet_Profile
, но поля FirstName и LastName хранятся так:
UserId | PropertyNames | PropertyValuesString | ....
----------------------------------------------------------------------
someId | FirstName:S:0:6:LastName:S:6:5: | ThomasSmith | ....
так что это означает, что мне нужно проанализировать строки, чтобы получить мои значения.
Мои вопросы:
- Это хорошая политика для запроса таблиц
aspnet_
напрямую, используя SELECT
?
- Как получить GridView, который содержит UserName, Email, LastActivityDate, FirstName, LastName (информация о стандарте и профиле вместе).