【问题标题】:modelcontainer update method模型容器更新方法
【发布时间】:2012-09-17 23:28:57
【问题描述】:

大家好- 我有这个测验问题,看看这种方法是否有问题,我解决了其他问题,但我看不出这种方法有什么问题。你们能发现这种方法有什么问题吗?

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

【问题讨论】:

  • 每次迭代都需要创建ModelContainer对象吗?
  • 这就是测验中给出的所有内容 :) 谢谢
  • Laziale,如果回答了您的问题,请务必将答案标记为正确 :)

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


【解决方案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】:

    您正在为每次迭代创建一个 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.
    }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 那个,你不需要为每个用户重新实例化 ModelContainer。
      猜你喜欢
      • 1970-01-01
      • 2012-09-04
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多