Я, вероятно, поступаю неправильно, пожалуйста, поправьте меня.
В настоящее время у меня есть модель пользователя с именем U_USER, она содержит поля, такие как адрес, receiveNotifications, HasCompanyCar и т. Д.
Эти пользователи имеют роли в таблице членства .NET.Когда пользователь входит в систему через членство, я получаю его запись в базе данных следующим образом (имя пользователя в таблице членства и в моей собственной таблице U_USER будут совпадать):
//Gets the current user
public U_USER CurrentUser()
{
return GetUser(HttpContext.Current.User.Identity.Name);
}
//Gets user details by username
public U_USER GetUser(String username)
{
return (from u in db.U_USER
where u.UserName == username
select u).FirstOrDefault();
}
Если я хочу получитьсписок всех пользователей, скажем, в роли «Создать», тогда я бы сделал это:
allUsers.Where(x => Roles.IsUserInRole(x.UserName, "Create"))
Это большой удар по производительности, так как он выполняет поиск для каждой итерации пользователя.Это заставляет меня думать, что я не собираюсь правильно управлять пользователями.Итак, чтобы ответить на этот вопрос:
Как правильно подключить членство к таблице пользователей, которая, в свою очередь, связана с остальными вашими данными?Я бы также согласился с тем, как сделать это более эффективно!
Большое спасибо:)
РЕДАКТИРОВАТЬ:
Я увеличил производительность благодарякод ниже.Я получаю пользователей в роли одним махом, а затем фильтрую их.
String[] usersInRole = Roles.GetUsersInRole("CanApprove");
users = users.Where(x => usersInRole.Any(y => y == x.UserName));
Но я все еще совершенно уверен, что я поступаю об этом ВСЕ неправильно!