2012-09-08 16 views
0

我使用Linq to Entity MVC,當我試圖從數據庫中刪除記錄時,我得到這個異常。
不允許新的事務,因爲會話中有其他線程正在運行Linq to Entity Mvc C#

由於會話中還有其他線程正在運行,所以不允許新的事務。

我的代碼:

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

請幫助! 在此先感謝。

回答

1

在這個漂亮的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(); 
       } 
3

在我的情況下,調用調用SaveChanges()不經常在嵌套循環解決了這個問題:

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

這是我的解決方案

//does not produce error 
foreach(...) { 
    foreach(...) { 
     ... 
    } 
} 
db.SaveChanges(); 
相關問題