powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как взять объект Entity?
3 сообщений из 3, страница 1 из 1
Как взять объект Entity?
    #38678851
erman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Помогите, пожалуйста, решить следующую задачу :
Есть такой фрагмент кода :
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public string Check_User(string login, string password)
{           
            User user;
            int idRole;
            string nameRole;

            using (ShoppingEntity db = new ShoppingEntity())
            {
                if ((db.Users.FirstOrDefault(n => n.secondName == login) != null) && 
                     (db.Users.FirstOrDefault(n => n.password == password) != null))
                {
                    idRole = ???
                    user = db.Users.FirstOrDefault(m => m.roleId);   ???
                    nameRole = db.Roles.First(n => n.IdRole == idRole);
                }
            }
       return nameRole;
}



Метод должен получать логин и пароль, проверять их в таблице Users и возвращать название роли из таблицы Roles, которая связана по полю IdRoles с таблицей Users. При совпадении пароля и логина в таблице Users, мне нужно взять значение поля Users.roleId, чтобы затем вытащить имя роли для данного объекта Users. Что-то не получается у меня взять ни объект user, ни idRole. Как правильно нужно сделать?
...
Рейтинг: 0 / 0
Как взять объект Entity?
    #38678893
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erman, можно сделать так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public string GetUserRole(string login, string password)
{           
    string roleName = null;

    using (ShoppingEntity db = new ShoppingEntity())
    {
        User user = db.Users.Where(u => n.secondName == login && u.password == password).FirstOrDefault();
        if (user != null)
        {
            Role role = db.Roles.Where(r => r.RoleId == user.RoleId).SingleOrDefault();
            if (role != null)
            {
                roleName = role.nameRole;
            }
        }
    }
    return roleName;
}


Но при таком подходе мы сделаем два запроса когда можно обойтись одним. Таблицы Users и Roles наверняка связаны отношением. Значит в модели EF для Users должно быть навигационное свойство на таблицу Roles. И значит код можно переписать так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public string GetUserRole(string login, string password)
{           
    string roleName = null;

    using (ShoppingEntity db = new ShoppingEntity())
    {
        User user = db.Users.Include(u => u.Role).Where(u => n.secondName == login && u.password == password).FirstOrDefault();
        if (user != null && user.Role != null)
        {
            roleName = user.Role.nameRole;
        }
    }
    return roleName;
}



P.S. Судя по твоему коду пароль хранится в БД в открытом виде. Это плохая небезопасная практика. Хранить следует криптографический хеш пароля + т.н. "соль" (salt). Я так понимаю что у тебя ASP.NET приложение. ASP.NET Membership и новая ASP.NET Identity делают это правильно. Используй готовые проверенные решения!
...
Рейтинг: 0 / 0
Как взять объект Entity?
    #38678947
erman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за помощь!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как взять объект Entity?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]