2010-06-11 84 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