Как обновить существующую сущность LINQ? - PullRequest
1 голос
/ 11 июня 2010

Как я могу обновить существующую сущность 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();

1 Ответ

0 голосов
/ 11 июня 2010

Вам просто нужно установить значения существующего объекта и затем вызвать submitchanges. Что-то вроде:

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

Вставка предназначена только для добавления новых объектов, а присоединение - для присоединения объектов из другого DataContext к существующему контексту

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...