2013-05-25 2 views
1

Является ли это правильным способом доступа к значениям при использовании Ling для SQL.I попытался вернуть IQueryable, но получил сообщение об ошибке «DataContext, доступ к которому после Dispose». и, следовательно, преобразовал его в список. Может кто-нибудь скажет, нормально ли это или предложит мне другой ответ, который, по вашему мнению, будет более эффективным. Могу ли я использовать ту же реализацию во всех других функциях, которые будут получать данные? Пожалуйста помоги.Любой лучший способ доступа к значениям из базы данных LinqToSql

public List<SS_User> Login(string UserName,String Password) 
     { 


      using (DbContext = new DALDataContext()) 
      { 
       IQueryable<SS_User> User = (from Users in DbContext.SS_Users 
              where (Users.UserName == UserName && Users.Password == Password) 
              select Users); 

       return User.ToList<SS_User>(); 
      } 
     } 

ответ

4

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

return (from user in dB.Users 
      where {your test} 
      select user).ToList(); 

Но это не оперативно другому.

Мысли:

  • не вы должны ожидать, ноль или один соответствует здесь? Не несколько? (FirstOrDefault/SingleOrDefault)
  • как это сказать. остановить хранение паролей. Нет, действительно; остановить его. Только соленые хеши.

Для получения информации причина, это не работает, когда возвращение IQueryable является то, что запрос является «отложенный» - это еще не выполнено. Если вы удаляете контекст данных («использование») перед повторением запроса (foreach, ToList и т. Д.), Тогда запрос не может работать. Это было бы похоже на то, чтобы вытащить шланг из крана, затем дойти до «бизнес-конца», открыть сопло и подумать, почему нет воды.

+0

Большое спасибо. это то, что я искал. Использовали соленые хеши. Можете ли вы это продумать: - разве вы не должны ожидать здесь нуля или одного матча? Не несколько? (FirstOrDefault/SingleOrDefault) – Karthik

+0

@karthi лично, я ожидал бы, что имя пользователя будет уникальным ключом, поэтому я никогда не ожидал, что более чем одна запись вернется для любого имени пользователя. Единственные вопросы: «Это вообще имя пользователя? И соответствует ли пароль?» –

+0

Да, имя пользователя будет уникальным. Паспорт может или не может совпадать на основе ввода пользователя. Я должен использовать .FirstOrDefault() здесь. Я проверил список в моем BL, используя .HasAny(), чтобы проверить, является ли его пустой – Karthik

Смежные вопросы