2012-07-30 65 views
0

我有一個代碼:的LINQ to SQL的不的SubmitChanges保存到底層表

 MyDataClassesDataContext dc = new MyDataClassesDataContext(); 
     Table<FormsAuthorisation> databaseAuthorisation = GetFormsAuthorisation(); 
     Table<ADForm> databaseForms = GetADForm(); 

     foreach (var auth in authorisation) 
     { 
      var databaseAuth = databaseAuthorisation.Where(p => p.GroupID == auth.GroupID && p.FormID == auth.FormID).FirstOrDefault(); 

      databaseAuth.CanRead = auth.CanRead; 
      databaseAuth.CanWrite = auth.CanWrite; 
      dc.SubmitChanges(); 

     } 

     foreach (var form in forms) 
     { 
      var databaseForm = databaseForms.Where(p => p.FormID == form.FormID).FirstOrDefault(); 
      databaseForm.FormDescription = form.FormDescription; 
      dc.SubmitChanges(); 

     } 

     dc.SubmitChanges(); 

這個代碼不保存任何更新的價值都沒有。

我用Google搜索它長,但也有不好的結果

我所有的表通過主鍵定義。

+2

你意識到你只需要調用'SubmitChanges'一次? – leppie 2012-07-30 13:36:32

回答

2

我會說這很簡單,因爲你是從不同的數據上下文(通過GetFormsAuthorisation方法)拉databaseAuthorisation。您實際上沒有對dc進行任何更改。因此,當您提交更改時,上下文沒有任何更改。

這同樣適用於databaseForms

選項是否可以超載您的方法,以允許傳入並使用dc數據上下文。或者你可以在這個代碼塊中複製你的方法的功能。顯然,如果你的方法應用任何合理數量的邏輯,複製並不理想。

例如:

public Table<FormsAuthorisation> GetFormsAuthorisation() 
{ 
    MyDataClassesDataContext dc = new MyDataClassesDataContext(); 
    return GetFormsAuthorisation(dc); 
} 

public Table<FormsAuthorisation> GetFormsAuthorisation(MyDataClassesDataContext dc) 
{ 
    //do whatever you already do inside your GetFormsAuthorisation function using dc parameter 
} 

現在,你仍然可以使用的功能,而不帕拉姆爲只讀執行(例如查看記錄),你可以使用重載的版本,允許修改記錄:

MyDataClassesDataContext dc = new MyDataClassesDataContext(); 
Table<FormsAuthorisation> databaseAuthorisation = GetFormsAuthorisation(dc); 
//make any changes 
dc.SubmitChanges(); 
+0

謝謝你的回答,我在這裏掙扎了一個多小時。 – Moons 2012-07-30 13:43:30

相關問題