【问题标题】:New transaction is not allowed because there are other threads running in the session Linq to Entity Mvc C#不允许新事务,因为会话中还有其他线程正在运行 Linq to Entity Mvc C#
【发布时间】:2012-09-08 08:05:47
【问题描述】:

我正在使用 Linq to Entity MVC,当我尝试从数据库中删除记录时,我收到了这个异常。

不允许新事务,因为会话中还有其他线程在运行。

我的代码:

if (Request.Form["Enroll"] != null)
{
    string[] selected = Request.Form["Enroll"].Split(',');

    if (selected != null)
    {
        if (selected.Count() != 0)
        {
            int k = 0;
            foreach (var item in selected)
            {
                var TraineeId = Convert.ToInt32(item[k].ToString());
                var sessionid = Convert.ToInt32(Session["user"].ToString());

                var id = db.EnrollTrainee.Where(i => i.TraineeID == TraineeId
                                                && i.TrainerID == sessionid);

                if (id != null)
                {
                    foreach (var a in id)
                    {
                        //db.Database.Connection.Close();
                        EnrollTrainee delete = db.EnrollTrainee.Find(a.id);
                        db.EnrollTrainee.Remove(delete);
                        db.SaveChanges();   //Getting Exception Here                                        
                    }
                }
                k++;
            }
        }
    }
    populatelistbox();
    return View();
}

请帮忙。!!! 提前致谢!!!!

【问题讨论】:

    标签: c# asp.net asp.net-mvc-3 entity-framework linq-to-entities


    【解决方案1】:

    就我而言,在嵌套循环中较少调用 SaveChanges() 可以解决问题:

    //produces error 
    foreach(...) {
        foreach(...) {
           ...
           db.SaveChanges();
        } }
    

    这是我的解决方案

    //does not produce error
    foreach(...) {
        foreach(...) {
           ...
        }
    }
    db.SaveChanges();
    

    【讨论】:

      【解决方案2】:

      在这个漂亮的Blog 中得到了一个很好的解决方案。

      我的问题的解决方案:-

       if (Request.Form["Enroll"] != null)
                      {
                          string[] selected = Request.Form["Enroll"].Split(',');
      
                          if (selected != null)
                          {
                              if (selected.Count() != 0)
                              {
                                  int k = 0;
                                  foreach (var item in selected)
                                  {
                                      var TraineeId = Convert.ToInt32(item[k].ToString());
                                      var sessionid = Convert.ToInt32(Session["user"].ToString());
      
                                      var id = db.EnrollTrainee.Where(i => i.TraineeID == TraineeId
                                                                      && i.TrainerID == sessionid);
                                      var idlist = id.ToArray<EnrollTrainee>();//Added New Line
      
                                      if (idlist != null)
                                      {
                                          foreach (var a in idlist)
                                          {
                                              EnrollTrainee delete = db.EnrollTrainee.Find(a.id);
                                              db.EnrollTrainee.Remove(delete);
                                              db.SaveChanges();                                           
                                          }
                                      }
                                      k++;
                                  }
                              }
                          }
                          populatelistbox();
                          return View();
                      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-23
        • 2018-05-20
        • 2016-07-07
        • 2017-03-27
        • 2012-09-07
        • 2021-08-20
        • 2017-06-26
        相关资源
        最近更新 更多