2010-10-01 184 views
0

我在ASP.Net MVC 1.0工作和SQL Server 2000中使用實體框架。 低於我的控制器出現故障代碼給出:在SQL Server 2000 MARS

  int checkUser = id ?? 0; 
      string userNameFromNew, userNameToNew; 

      if (checkUser == 1) 
      { 
       userNameFromNew = "U" + Request.Form["usernameFrom"]; 
       userNameToNew = "U" + Request.Form["usernameTo"]; 
      } 
      else 
      { 
       userNameFromNew = "C" + Request.Form["usernameFrom"]; 
       userNameToNew = "C" + Request.Form["usernameTo"]; 
      } 

      var rMatrix = from Datas in repository.GetTotalRightData() 
          where Datas.UserName == userNameFromNew.Trim() 
          select Datas; 

      Right_Matrix RM = new Right_Matrix(); 


      foreach(var Data in rMatrix) 
      { 
       RM.Column_Id = Data.Column_Id; 
       RM.ProMonSys_Right = Data.ProMonSys_Right; 
       RM.UserName = userNameToNew; 
       UpdateModel(RM); 
       this.repository.AddRightTransfer(RM); 
      } 

      return RedirectToAction("RightTransfer"); 

我的故障模式的代碼如下:

我的代碼顯示錯誤一旦它在型號代碼說明DataReader的是已經打開,並且我需要先關閉它。

請提出一個解決辦法。

回答

1

嘗試移動AddRightTransfer環出LINQ的foreach的,併到一個單獨的一個。我認爲在數據庫結果集關閉之前,LINQ正在執行第一次添加。通過將呼叫轉移到第二個foreach,你應該避免這個問題,如果這是發生了什麼。

下面是一個例子:

List<Right_Matrix> matrixes = new List<Right_Matrix>(); 

foreach (var Data in rMatrix) 
{ 
    Right_Matrix rm = new Right_Matrix(); 
    rm.Column_Id = Data.Column_Id; 
    rm.ProMonSys_Right = Data.ProMonSys_Right; 
    rm.UserName = userNameToNew; 
    UpdateModel(rm); 
    matrixes.Add(rm); 
} 

foreach (var rm in matrixes) 
{ 
    this.repository.AddRightTransfer(rm); 
} 
+0

OK,如果可能的話,請給我提供了一些代碼來做到這一點。 – 2010-10-01 08:18:58

+0

非常感謝,你的回答解決了我的目的。 – 2010-10-01 10:52:50

0

的問題是,要修改的數據庫,同時還超過它迭代。無論是修改前完成查詢,例如:

foreach(var Data in rMatrix.ToArray()) 

還是不要在你的循環修改數據庫的,就像這樣:

 foreach(var Data in rMatrix) 
     { 
      RM.Column_Id = Data.Column_Id; 
      RM.ProMonSys_Right = Data.ProMonSys_Right; 
      RM.UserName = userNameToNew; 
      UpdateModel(RM); 
      context.AddObject("Right_Matrix", RM); 
     } 
     context.SaveChanges(); 

顯然,這兩個context.通話將不得不被製作成方法在你的倉庫,但你得到的圖片。

+0

謝謝,我會嘗試並回復。 – 2010-10-01 08:31:00