modelcontainer更新方法

时间:2012-09-17 23:28:57

标签: c# sql linq entity-framework c#-4.0

Heloo everyone - 我有这个测验问题,看看这个方法是否有什么问题,我解决了其他问题,但我看不出这个方法有什么问题。你们这个方法可以发现错误吗?

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

3 个答案:

答案 0 :(得分: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.
}

答案 1 :(得分: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应自动保存。

答案 2 :(得分:0)

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