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();
     } 
    }

提前致谢, Laziale

4

3 回答 3

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 回答
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 回答
0

应该是select q.FirstOrDefault();var u将是一个IEnumerable,不是吗?

于 2012-09-17T23:31:11.100 回答