1

これは、Ling to SQL を使用して値にアクセスする正しい方法ですか?IQueryable を返そうとしましたが、「DataContext は Dispose 後にアクセスしました」というエラーが表示されました。したがって、それをリストに変換しました。これで問題ないかどうかを教えてください。または、より効率的だと思われる他の答えを提案してください。データをフェッチする他のすべての関数で同じ実装を使用できますか? 助けてください。

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

1 に答える 1

4

それは仕事をします。過度に具体的にすることで、自分の人生を難しくしていることに注意してください-次のようにすることができます:

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

しかし、これは操作上は何ら変わりはありません。

考え:

  • ここでゼロまたは1つの一致を期待すべきではありませんか? 複数じゃない?(FirstOrDefault / SingleOrDefault)
  • 何と言うか.. パスワードの保存をやめてください。いいえ、そうではありません。やめろ。ソルトハッシュのみ。

IQueryable を返すときに機能しなかった理由は、クエリが「延期」されているためです。まだ実行されていません。クエリが反復される (foreach、ToList など) 前にデータ コンテキスト ("using") を破棄すると、クエリは機能しません。それは、水道の蛇口からホースを外し、「ビジネス エンド」まで歩いてノズルを開け、なぜ水が出ないのか不思議に思うようなものです。

于 2013-05-25T09:16:57.163 に答える