2010-06-11 42 views
1

如何更新現有的LINQ實體?
此代碼給我:「不能插入已存在的實體。」
更新/插入LINQ的任何更好的做法?如何更新現有的LINQ實體?

 foreach (ListViewItem lvi in lvStudents.Items) 
     { 
      HiddenField hfStudentID = lvi.FindControl("hfID") as HiddenField; 
      CheckBox cbPresent = lvi.FindControl("mycb") as CheckBox; 
      int sInt = Int32.Parse(hfStudentID.Value); 
      dc = new DataClassesSODataContext();//I renewed the dc to make sure that wasn't the problem? 

      var currStudent = dc.students.Single(x => x.studentID == sInt); 

      grade g = dc.grades.Single(x => x.subjectID == subjID || x.studentID == sInt); 
      if (g == null) 
      { 
       g = new grade(); 
       g.subject = dc.subjects.Single(x => x.subjectID == subjID); 
       g.student = currStudent; 
       g.present = cbPresent.Checked; 
       dc.grades.InsertOnSubmit(g); 
      } else 
      { 
       g.present = cbPresent.Checked;      
       dc.grades.Attach(g, true);//I tried both attaching and inserting 
      } 
     } 

     dc.SubmitChanges(); 

回答

0

您只需設置現有實體的值,然後調用submitchanges。喜歡的東西:

var g=dc.grades.Single(x => x.subjectID == subjID || x.studentID == sInt); 
g.subject="some new subject"; 
dc.SubmitChanges(); 

插入只是爲了增加新的實體和附加是用於連接從另一個DataContext的實體到現有的環境。

+0

Omg,我錯過了。謝謝! – kversch 2010-06-11 09:31:50

+0

只是一個建議的話,因爲你剛剛開始與linq-to-sql:看看實體框架,而不是。基本上它和Linq To SQL一樣(加上更多),但它仍然會被MS支持,而LinqToSql或多或少都會死掉。 – 2010-06-11 12:19:35