0

みなさん、こんにちは。このクイズの質問で、この方法に問題があるかどうかを確認します。他の方法を解決しましたが、この方法に問題はありません。この方法で何か問題を見つけられますか?

private void UpdateUsers(List<string> users) 
    {
 foreach (var user in users) 
    { 
    ModelContainer DBContext = new ModelContainer(); 
    var u = from q in DBContext.Users 
    where q.Name == user 
    select q; 
    u.IsActive = true;
     DBContext.SaveChanges();
     } 
    }

よろしくお願いします、ラツィオ

4

3 に答える 3

1

反復ごとにModelContainerインスタンスを作成していますが、これは危険なように見えます。

私は次のようなことをします:

using(ModelContainer DBContext = new ModelContainer())
{

    foreach (var user in users) 
    { 
        var u = (from q in DBContext.Users 
         where q.Name == user 
         select q).FirstOrDefault(); 

        if(u!=null)
        {
            u.IsActive = true;
        }
  }
  DBContext.SaveChanges(); //Save changes once, and not per user. Unless you can but I doubt it.
}
于 2012-09-17T23:39:42.203 に答える
1

あなたはこれをするべきです:

private void UpdateUsers(List<string> users) 
{
    using(DBContext context = new DBContext("myConnectionString"))
    {
        foreach (var user in users) 
        {
            var u = from q in DBContext.Users
                where q.Name == user 
                select q; 
            u.IsActive = true;
        } 
    }
}

このusingステートメントを使用すると、DBContextは自動的に自分自身を保存する必要があります。

于 2012-09-17T23:41:40.833 に答える
0

すべきselect q.FirstOrDefault();か、var uそうなるでしょうIEnumerable、いいえ?

于 2012-09-17T23:31:11.100 に答える